home j h h l . n e t home
polyharp splash screen

PolyHarp 1.0.0

Look for PolyHarp soon in the App Store!


PolyHarp is an extended chorded zither in software for iPads.

PolyHarp takes the idea of a collection of strings and chords and extends it to greatly expand the number of strings, the kinds of chords it can use, the layout, fretting, damping vs. undamping and more!

You can use the Glossary_ for quick hints.
Polyharp uses its own internal synthesizer, but can also drive MIDI synthesizers as a controller.
You can either just use the preset instruments, or build custom chords, layouts, and behaviors!

It tries to explore the question:

What if musical scales are not as important as the relationships between pitches? What if those relationships can be defined in a lot of ways, and combined into arbitrary chords, and built into languages of music based on these relationships?

PolyHarp is a software instrument which is very like a chorded zither (usually known as an Autoharp, which is actually a name trademarked by the U.S. Music Corporation/Oscar Schmidt). PolyHarp lets you explore these concepts, and play music in a way that frees you from organizing notes into scales while still allowing you to access the relationships between pitches.

Pushing virtual buttons allows sets of virtual strings of any pitch to be played by strumming them.
Like a its real-world equivalent, PolyHarp lets you strum with all your fingers and you can also press several buttons at once. Unlike a real chorded zither, there are no conceptual limits to the number of strings or the pitches assigned to them. PolyHarp uses its chords to create the strings that they need — and they can have multiple-string courses, precisely tuned, and fretted! PolyHarp also lets you isolate string sets in different areas of the screen, and gives you great flexibility with the size and placement of the chord buttons. PolyHarps can be archived, and they can also be used as MIDI controllers, if you don't mind losing the microtonal capabilities.

PolyHarp uses AudioBus 3 and can save its configurations there. It can also integrate with AudioBus3's MIDI support.

Here are some somewhat old videos:

PolyHarp: turn a "Nearly Empty" patch into a more interesting PolyHarp: give it a skin, create more chord buttons, arrange the string area, arrange the buttons, assign chords to buttons (uses a tone spiral like Droneo's), play PolyHarp!

PolyHarp, showing its internal synthesizer (which may change), and loading various kinds of harps, changing the layout of the string area and chord buttons, skin coloring, change in synth parameters, showing "undamping" bars (touching them enables damped strings instead of suppressing live strings), multi-course strings (with equal or random spacing), fretting strings and allowing for some sliding as they change, hammer-ons, lock bars, and harmonically tuned chords which you can build arbitrarily or with the aid of hundreds of Scala scales.

Shows MIDI transition from PolyHarp: customize a string area to transmit on MIDI channel 2, start up MitoSynth on channel 2, go back to PolyHarp and it plays it, according to the volume setting and polyphony.



I've been playing the Autoharp for more than 40 years. I have about 7 of them right now. Each one has different tunings and chord bar sets. Yes, they go out of tune a lot, and each one has 36 strings (except for the little one and that Omnichord).

I do a lot of experimenting with tuning the strings and making chords. You can read about those experiments here. But at some point, you run up against physical constraints related to the number of chords, the number of strings, and how to tune them.

The Suzuki Omnichord (that white plastic thing in the front) is a kind of a hardware solution to some of those problems. It has 36 Chord_Buttons, a lot more than can fit comfortably on an Autoharp, and can actually play about 84 chords. It's now called the Q-Chord and has MIDI output. PolyHarp's internal synthesizer actually sounds a lot like the Omnichord's.

PolyHarp can be thought of as an update to my old Commodore Amiga program LYR, which was a chorded zither simulator I wrote in the late 80s. It played MIDI synthesizers and had some pretty bizarre chords and features, including a strum sequencer. But LYR never got to a stage where it was user configureable.
It nevertheless was a pretty impressive MIDI controller. It was especially good at providing an easy way to control MIDI velocity, which sounded especially good on the Yamaha DX7.

You can read about LYR and other old Amiga software of mine using this link.



term explanation
Glossary You are reading it! Tap the Glossary link again to make this go away!
Autoharp A popular form of chorded zither, invented in the 19th Century. Autoharp® is a registered copyright of by Oscar Schmidt
PolyHarp A Polyphonic, microtonal-friendly chorded virtual instrument.
Base Key A frequency that all the chords are relative to.
Just A system of intonation where all the intervals can be expressed as integral ratios.
EDO Equal Divisions of an Octave. Modern Western music is mostly written in 12 EDO, also known as 12 tone equal Temperament (12 TET).
EDI Equal Divisions of another Interval. PolyHarp lets you divide any interval into equal parts, e.g. 1:4@5/4 is the first degree of a 5/4 (perfect third) divided into 4 equal parts.
TET Tone Equal Temperament. The overwhelming number of Western music uses 12 TET, also known as 12 EDO (equal divisions of an octave)
Interval A difference in pitch between two frequencies.
Interval Spec A coded name for an interval, like "V" or "3/2" or "7:19".
On String A virtual string that is positioned where the On String Interval places it, but with the tuning of the string's interval.
Chord Bar A Chord Type that is transposed by an interval related to the Base Key. If the Base Key is C, a V7 chord would resolve to be a G7.
Chord Bars A set of Chords.
Chord Button A button that represents a Chord Bar.
Chord Type A set of intervals. For example, a Major (M) chord would be based on the intervals I, III, V.
Lock Bar A bar which stays down until you touch it again.
PolyHarp patch A configuration of PolyHarp: chordbars, chords, colors, and layout
Course Several "strings" behaving as (nearly) the same pitch.
String Area A rectangle with virtual strings to strum.


PolyHarp's main features are:

  • PolyHarp runs on iPad only. It's too big for an iPhone, even a big iPhone!
  • Plays synthesized audio, as well as MIDI. The synthesized chords can be made of any musical intervals, not just those in a 12EDO scale. MIDI uses only tones from 12EDO (rounding whatever the actual pitch may be).
  • "Strings" on the PolyHarp correspond to the strings of the chords.
  • Any chord setup as whole can be transposed.
  • You can make up PolyHarps with a great number of Chords. The intervals used in these chords can be chosen in many ways, and also taken from the huge number of scales in the Scala collection.
  • A Chord_Bar is a collection of intervals which themselves are transposed by a relative interval, which is resolved relative to a Base Key.
  • You can layout the Chord_Buttons (which control the Chord Bars) all over the screen.
  • Strings are resolved within an adjustable frequency range.
  • You can have several discontinuous ranges of string_areas.
  • A chord can treat strings like a fretted instrument, assigning several pitches to the same string. You can glide from one pitch to another.
  • Stringed instruments with more than one string per course_ can also be built, with up to 7 strings per course, with random or non-random variations on the intended pitch.
  • Uses Audiobus 2.0 and IAA!


There are a lot of concepts in PolyHarp that are a little unusual or rather, not a little unusual.

If you see a word or phrase with a dotted blue underscore and yellow background in these instructions, it's a Glossary_ item that you can click on to see a quick definition in a pop-up! Tap another Glossary item to open it, or tap the same one again to dismiss it!

Before you start, you might want to take some time to customize your iPad in the Settings App in the following ways:

  • Turn off keyboard clicking!
  • Turn off the "Multitasking Gestures" and "Allow Multiple Apps" controls! PolyHarp depends on multi touch, and if these are left on, swiping all over the screen will send special messages that will send you to the Home screen, open the multitasking console, swap between apps, or have other consequences!

When you start up PolyHarp, it tries to reload the last PolyHarp_patch that you were working with.

  • There are a lot of buttons and sliders on that big butterscotch toolbar. Sorry.
  • Over on the left is the PolyHarp logo and version number, and underneath, the current patch name. Touch the patch name and you'll get to the patch loading page. A long touch on the patch name will reload that patch in case an edit got out of hand.


The current internal synthesizer is a very simple one, so that it can have the high polyphony needed for simulating a massively stringed instrument. It's running by default at the effective processor friendly speed of 22050 Hz. (What it's really doing is running at 44100 Hz and only calculating every other sample to save some time.)

PolyHarp Synth (PHSynth) Algorithm

Each string area has a dedicated set of synthesizer parameters associated with it.

The synthesizer interpolates between four wavetables. The sound is divided into an attack wave and a sustain wave. The attack wave is interpolated into the sustain wave over a period of "attack time" seconds. This combination can be called a wave pair. Furthermore, these wave pairs themselves are interpolated depending on the frequency range of the string being hit. Between the extremes of these ranges, the two wave pairs are interpolated.

This basic waveform can be subject to configurable modulations. These modulations take characteristics of the strum, such as where on the string you have strummed and how fast, and use it to modulate characteristics of the sound in that string area.

PHSynth settings


The synth settings control can be used to set up a synth associated with the current string area.

You can choose one of the presets in the table at the top, and base new presets on them. A PHSynth doesn't have to be using a preset, and even custom PHSynth settings are saved with the PolyHarp, when you save the PolyHarp itself.

PHSynth wavetables

The four waveforms can be individually set to a number of preset waveforms by tapping their names. When you do, a waveform picker shows up with names and pictures of the available waveforms. Some are rather complicated! Noise and Silence are among the choices.

image When you have chose a waveform, touch DONE to dismiss the picker.

To change the frequency values associated with each "high" or "low" waveform, the usual frequency picker is used:


You can set these frequencies to the same value and force an all low, all high, or sharp transition in the interpolated waves for a string. But usually, you can set them to be about the same as the range of frequencies you have set up for the string area.

Tip! Low strings often benefit from higher harmonic content, and so do attacks! But there's no obligation to do that.

PHSynth modulations


Where you "pluck" the string (the strum), and how fast you pluck it (the velocity) can be used to further alter the timbre of the PHSynth. You can set up sources and destinations via the Modulation dialog. Tap the source and destination names to step through the choices.


  • velocity
  • strum position on the string


  • volume
  • distortion
  • pan
  • bend
  • channel bend

Each modulation links the source of modulation to a destination, mapped with a scaled curve. You can pick what kind of curve it is, and the ranges of the input and output. The input is always going to be normalized from 0 to 1, but the output ranges may vary, based on the modulation. The bends, for instance, are expressed in cents (+/- 1200 cents)

I'm experimenting with a non - slider text box for setting these values, just touch it and slide left and right to set it, or long touch it to set it to its default. It's probably going to be replaced!

PHSynths are associated with each string area, so different string areas can have different timbres. 

Each string also has an envelope applied to it, independent of the "attack" part of the PHSynth, and the signal may be clipped when it is loud enough, which adds some harmonics to the timbre.



Sliders control the envelope of the string: attach, decay and damping. The envelope is very simple: plucking a string puts an amount of energy into a "reservoir" which is dependent of the speed with which you strike the string. That reservoir feeds an envelope level at a certain rate set by the attack rate. That envelope level is also decayed by the decay rate. It's rather like filling up a bathtub with the drain open. The resulting envelope is entirely based on a reservoir level, an attack rate, and a decay rate. Plucking the string again just adds more energy to the original reservoir level.

The decay rate setting controls the decay rate of a strings amplitude, but when the string is damped, rather than just turning off the sound, it changes its decay rate to a faster decay. That damping decay amount is set by the Damp slider. When the slider is at the left, the damping is vary fast, at the right, it's slower. Thus, damped strings can cut off suddenly, or more slowly. This simulates "worn felts" on the chord bars of a physical chorded zither.


The Polyphony stepper controls the maximum number of simultaneous oscillators that can be playing, currently 400. Polyphony also affects the volume, since the more oscillators you have going at full blast, the more likely it is to distort. You can automatically set the polyphony to the current maximum number of strings by tapping the "polyphony" label.

Usually, there aren't that many oscillators playing simultaneously, so I usually set the polyphony to something more like the number of strings that will actually be playing simultaneously. You can do this by DOUBLE tapping the polyphony label; which will then set it to the maximum of the number of strings used by any of the chord bars. This applies also to multiple string courses_.

Making the polyphony less than the total number of strings may affect string damping, which after all, means the strings are still playing until they are damped out. This is especially true if you have "scrub" turned on.

Or, you can make them somewhat louder than would be prudent; the Volume slider lets you adjust the volume so in the case of massive, high velocity polyphony, it won't overload and distort. Or ... maybe you like that?

You can also use the stepper to add or subtract from this polyphony setting. The +10 and -10 buttons speed up this process a little, and holding a touch on a button and wiggling the touch repeatedly operates it.



Playing a PolyHarp is pretty easy — there are a set of virtual buttons and a set of virtual strings. You push a button to select a chord and strum or tap the virtual strings to play the notes which are in that chord. PolyHarp is multi touch, so you can do some fancy plucking! Not only that, but you can press chord buttons simultaneously, which results in chordal dampening (or undampening) effects.

You can load different PolyHarps by tapping the name under the word "PolyHarp", which will cause a large dialog box pop up.

Here you can load, save, import, export, rename, delete, describe, tag and recolor a PolyHarp. You can set a preferred Base Key and also — this is important — whether the Chord Bars damp the strings, like most Autoharps do, or enables damped strings, which makes it more like raising the dampers on a piano.

Multitouch extends also to the buttons: pressing two or more buttons on a damped PolyHarp will play only the common strings of the selected chords, and pressing two chords on an "undamped" PolyHarp will add the strings of all the chords. This means you can construct some interesting experiments in polyphony.

There are a few buttons that control how the chord bars act:

  • If Stay Down

    Stay Down
    is enabled, chord bars stay down when touched, and if you hold several chords, they all stay down, until you touch a new chord bar after all other touches are up, or you turn off this feature. While it's down, the title changed to "Free" from "Hold". Hold does not affect Lock_Bar chords, or chords ephemerally locked by using the "Stick-on-4" button.

  • Stick-on-4
    If Stick-on-4 is enabled, tapping a chord bar 4 times will lock it down like a Lock_Bar ; tap it four times again to free it up.

    There's one more button, "Scrub", which if selected does not ignore the damped strings when played, it plays them, but with a lot of damping, just as felts in a real autoharp do. The Damping slider changes how damped they are. This adds a little authentic noise to the playing, but also, you might be able to work out a way to make the damped "scrubbing" sound on purpose, and with more consonance!



Real chorded zithers have the frustrating problem that they often have a good collection of chords, but then some fiddler or guitarist pops by and plays a little riff in E, or throws on a capo, and now they are in some other inaccessable key. That's very frustrating! PolyHarp has a virtual Capo feature that lets you transpose all the chords (and therefore, the strings) with the tap of a "+" or "-" button:

At the top is the current Base Key, the frequency that all the string pitches are based on. You can just type in there to bring up the frequency view.

Below that are the "-" and "+" buttons, which will transpose the Base Key by the interval specified below it. It's usually set to "V", and if you set that to I# (100 cents), you can transpose by a semitone. If you are working with just intervals, you might want to set that to "3/2", and if you are working with some other equal temperament, like 19EDO, then you can set it to "1:19" or whatever is appropriate.

Note that you can also set chord buttons to "relativize" your chords, so tapping it will retune the strings on the fly!

Transposing will cause the frequency of the base tone to change, and in changing, it may creep into octaves that are higher or lower than make sense in your PolyHarp. The "=" button transposes the interval into the "third" octave.

However, some chord types are set up to not repeat(!) and so which octave it is matters when using those chords.



Going into EDIT MODE exposes a lot of the features and customization of PolyHarps.

Patch dialog

This is a radio control that puts the editor into different modes, which interpret gestures differently.

  • Play is a way to play the PolyHarp safely while still in editing mode. It's for testing while creating new layouts!
  • Move/Set lets you move buttons around, move all the Chord_Buttons around, and scale and position them. It also lets you create, delete, move, resize and otherwise configure String Area properties.

    • Touching and moving a Chord Button lets you reposition it.
    • Double tapping a Chord Button opens up a chord button editor:
      Patch dialog
      This lets you set the transposition interval, size, hammer-on, lock, relativity, button size, and one of two colors for that button.
      The Tone Spiral is a pretty simple one, it lets you set guides to snap to and select chords from a list, which can be sorted by tags. Sorry, you can't choose a scala scale here, for that you need to use the Chord Maker .
    • Delete will delete the button.
    • Revert will reset the button to how it was when the dialog came up.
    • Lock makes the button's bar into a Lock Bar. A lock Bar stays down without needing to hold it.You can use it to damp out strings in other scales.

    Lock bars have shield-like buttons.
    Lock Button

    • Hammer makes the button into a hammer: every time you touch it, it plays allthe playable notes. The undamped strings are still available to strum. I'm not sure what velocity values hammered strings get.

    Hammers have rectangular buttons.
    Hammer Button

    • Relative means that the interval assigned to the button is applied to the base frequency, transposing hte whole PolyHarp with one button. It's like the Capo feature. Setting the interval to 1/1/ (0 cents) will reset the base Frequency to what it was before all the relative transposing.

    Relatives have supercycle buttons, but with the edge a different color.
    Relative Button

    • The example of what the button will look like is also used to change the shape of the button. Just touch the rendered button and it will resize with the touch point as the lower right hand corner. You can even drag outside the box fro some bug buttons.

    • You can change the color of the button to one of two colors. Use the selector for that!

    • You can finish editing your bar and go to an adjacent bar using the "previous bar" and "next bar" buttons. The order is a little hard to determine though!

  • You can move all the buttons in the chord_box around by touching in the box where there are no buttons and dragging it. You can rescale the box and all the buttons by using two fingers anywhere to zoom, rotate, and move them! If you somehow lose the box, you can get it back (usually) by shrinking it with a pinch until it reappears.

    Double tapping in the chord box, but not on a button, will flip the buttons around their x axis, which is a transform you can't do with just two fingers. Then you can reposition them!

  • Touching a String Area makes it "current", its edges are outlined, and its properties are made editable in the menu at the bottom of the screen.

  • The string areas have resizing circles on their corners. Move them to change the size of the String Area, and touch the middle of a string area to just move it around.

  • The Quad button frees the string area from rectangular constraints. You can make any four-sided harp now, even twisting and overlapping the strings.

  • There are a few buttons which help transform the string areas:

    • Dup makes a duplicate of the current String Area, inset slightly so you can move it more easily.
    • Delete removes the current String Area.
    • Shrink makes it smaller in case it exactly overlays another string area that you want to get to.
  • If two string areas are close enough, you can snap their corners to each other if you touch where their circles overlap!

  • Clean is for helping to align chord buttons which is a strange process.

    • first you "collect" a series of chord buttons by dragging over them
    • Then with two fingers, you can evenly align a row of them. It takes some getting used to!
  • Create is for creating and deleting new chord buttons. It makes a copy of whatever you edited last. You can use multi touch to make a lot of buttons and move them around. If you hold a button for a little while, the mini editor comes up, as it does in "Move/Set" mode.

There are three other buttons here:

  • Grid puts up a grid that is 60x60, and successive taps make it 45x45, 30x30, or 15x15, (and then off). This may change! Certain movements for editing the PolyHarp are now snapped to a grid.

  • The Chord Maker button is the editor for creating and editing types of chords, that is, collections of intervals. This is a powerful interface! See: Chord Maker



PolyHarps are colored with skins that endeavor to have harmoniously related colors. It's not overwhelmingly successful, but it is better than nothing!

The largest circle on the color wheel represents a base color, the one all the other colors are related to. This is also the color of the background of the PolyHarp and the color seen in the list of patches.

The two smaller circles set the color of the string areas and chord buttons. Two contrasting colors are used in these cases. Touching and selecting with the double ringed circle will set both of these colors symmetrically. Touching the single circle will set just that color alone. You can similarly set the saturation semi independently or independently for these colors.

Around the edges are refinements in saturation and value for the selected colors.

The pairs of colors on the top left and right set the colors of the chord buttons. The top is the color of an unpressed button, the bottom is the color of a pressed button. You have two color choices for buttons (left and right).



PolyHarp creates virtual strings in recatangles called String Areas. There can be many string areas on the screen, and each area has the following properties:

  • A range of frequencies that the strings are generated in. This way, you can break up a large set of strings into separate areas, organized, say, by one or two octaves.
  • Its own synthesizer setting. Each string area can sound different!
  • A MIDI channel and program. You can have each string area play on different programs on different MIDI devices!
  • Its own shape! You can keep them rectangular, but also use the "quad" option to make them different shapes and orientations.

When you push a ChordBar, all the strings in all the String Areas are activated that correspond to the resolved notes in that chord, and strumming the strings in one area does not also strum the strings in another area, even if they are the same "note". It's as if they are on different channels.




This is a special control for setting the distribution of strings in a course. Normally, a string is one string that is set to a determined frequency. You can make it so that a "string" is actually a set of strings, either randomly or equally spaced.

This "logical string" can be represented by up to 7 "virtual strings". How many virtual strings are created is set by tapping the numbers in the segmented control.

The intervallic range of the virtual strings' spacing is controlled by the slider and the triangle buttons. All ranges are truncated to a tenth of a cent. You can set the range up to an octave (1200.0 cents) which extends both "sharp" and "flat". The slider is nonlinear, giving more accuracy at low values. Each tap on the triangle adds or subtracts one tenth of a cent for fine tuning.

The random feature even extends to 1 string! That way you can make a PolyHarp with out of tune strings, as if it were left in an attic for a few years.



Chord Types are named collections of intervals. For instance, a major chord (M) is a collection of the I, III, and V intervals. You can specify the intervals in a chord by using the very powerful Tone Spiral.

Chord Naming

Even though conventional chords can look pretty complicated, like FMaj9+11/C , PolyHarp has so many kinds of intervals, and no restrictions on which shall be collected with which, that you need some creativity coming up with chord type names. For example, you could have a chord that is 1/1, 5/4, 34:51, 9:5@5/4, 115.3434 (cents) and so on. These chord types are then used with transposition interval to specify a Chord_bar.

A lot of chords built with different intervals function in similar ways - the aforementioned M (Major third), made of I-III-V works a lot like its just cousins 1/1-5/4-3/2 or the 19-EDO 0:19-6:19-11:19. It'd be interesting to set up "namespaces" so that the names of the chords match how they function more than how they are technically constructed - which you could discover if you could find its namespace. You can use the "tags" feature of the chord types to help with that. Also, you can give a chord type a name with a " " (space) in it, and it can peel off what's in front of the " " when it names the chord button, so it doesn't have a long name!

At any rate, I am hammering out a few PolyHarp-only chord naming conventions to help out somewhat.

The Chord Type name and Description are pretty self explanatory, and the tags are covered a little below, but there is also the repeat interval.

A chord type can either repeat within its repeat interval or exactly specify which intervals make it up. This helps in most situations, since you'd normally specify an octave's worth of intervals and transpose them by an octave up and down the scale. But there are exceptions! For example, to make a 31-EDO scale, all you'd have to do is specify a 1/1 , select "repeat", and make the repeat interval 1:31. You can make scales that repeat at all kinds of intervals, or not at all. Non repeating scales are useful for precisely setting intervals on specific strings.

On String

Each string that a chord type creates is normally placed where its pitch would normally place it, as if it were on a piano keyboard. That is, it is logorithmic with respect to octaves. But sometimes, you want to move that string, or reuse it with several piches. For that, there's a separate interval spec available called the "On_String" spec. This is like how, on a guitar, you can play a C on an A string. In PolyHarp's case, since you don't know the exact tuning of each string (kind of like using a capo...), you'd have to specify the string position using the interval of where the string ought to be. This way, different notes can be played on the same string (like a guitar). In a weirdly expanded way, you can build fretted chords and strum them.

Sometimes, I just set that up as equally divided intervals, like 0:6, 1:6, 2:6, etc. for a 6-stringed instrument, but you can bunch them up more and also put them in reverse order.

The On String string's location is as if 1/1 (0 cents) is based on C4.

As another consequence, you can make one of these retuning scales, repeat it, and add create a lock bar chord based on this scale (transposed by the chord interval). The effect is to retune the strings in all the chords that use those strings (and of course damp the strings that aren't in the lock bar).

You can swap the tone spiral's display from showing the Interval to the On String Interval by touching the name "Interval" or "On String". An unset On String just uses the interval to position the string.

Chord Parameters

  • Select a chord from the chord type list if you want to base a new chord on an old one. Built-in, read-only chords are maked with the "read-only" character, ✦.
  • There is a list of tags that you can use to associate chords together (rather like the namespaces I mentioned).

    Tag Icon
    Tap a tag name and it pops matching chords types to the top of the list. Click the Tag Icon on the right side of each tag name to add this tag to the chord that you are building. You can also just type in your own set of comma delimited tags to associate with this new chord type, and it will add them to the tag list if they aren't already there.
  • The Tone Spiral is a way to visualize intervals. Each whorl is a new octave, and intervals are laid out on the tone spiral as big white spots.

  • Add a new interval with the (+) button. it will be places in the middle, inused portion of the spiral. You can then drag it to a place you'd like it to be.

  • Similarly, you can remove an interval with the (-) button

  • There are buttons to build guides that you can snap to:

    • 12 EDO, which is pretty pervasive and easy to understand,
    • Just, a selection of popular just intervals,
    • Scala, where you get to choose from thousands of Scala scales, collected by Manuel Op De Coul. By default, this comes up as Harry Partch's 43 tone scale, but you can either type in part of a name of one of the included scales, or choose one from the massive list. There is a crude tagging system in place too: you can search for "#j" to find scales that only have just intervals in them, or #w to find scales that are "wide" and have intervals out of the range of 1/1 and 2/1. These are just guides, you get to pick intervals out of them to make your own chord types.
    • Equal, equal tempered scales, based on an interval unit you type in, like I or 1:19 or 1:5@5/4.
  • Using the Tone Spiral button,

    Tone Spiral
    all the intervals in the guide, which is usually a scale, are turned into actual, editable intervals. You can then remove intervals that you don't want in the chord.

    If you are looking at On_String intervals, it creates them with on string Intervals as well. After that, you can go back to looking at Intervals and "retune the strings".

  • You can use the Free and Snap buttons to either perturb your intervals a little or make sure they snap to the guides.

  • You can also just directly type in an interval that you have selected. You can select an interval by clicking on it, or, if they are too dense, by using the << and >> buttons.




This is a special control for setting frequencies. By clicking on various boxes, you can pick a pitch and octave that translates into a frequency. You can also use the slider to adjust that frequency by +/- 50 cents (a quarter tone). If this is not accurate enough, you can tap on the name of the frequency in the upper left corner, and a normal keyboard will appear.

This control is used to set the Base Key, and the ranges of a String Area.



A musical interval is a measure of the distance between two pitches. Mathematically, it can be seen as the ratio of the frequencies of the pitches. For example, a note that is higher than another note by the interval of one octave will have a frequency twice the frequency of the other tone.

Intervals can be any size, and are often measured in "cents", which are 1/1200th of an octave. That makes a standard western semitone, like the interval between F and F#, equal to 100 cents. This makes it easy to compare intervals to each other and to the prevailing tuning system at the same time.

Most of the time, when talking theory about them, intervals are resolved to be between a unison (1/1, 0 cents) and an octave (2/1, 1200 cents) so that they can be easily compared to each other. PolyHarp does not constrain you to this range. More about that in the Chord Bar section.


Intervals are used for describing chords in a Chord Bar, and how that chord may be transposed relative to the Base Key.

A chord is made out of a set of intervals, for example, a Major (M) chord in 12 EDO is I, III, V, and that chord may be used in a chord bar by transposing those intervals with another interval, like IM, VM, IV7, etc. Those chords themselves get "realized" into sets of pitches when the Base Key is specified. Thus , if the Base Key is A, IM becomes AM, V7 becomes E7, VIm becomes F#m, etc.

Another place Intervals are used is to transpose the Base Key. The Base Key can easily be transposed up or down by a preset interval, so that you can make a small, but complicated set of chords and transpose them to a related set of chords really quickly.

Another place is in specifying the repeat interval of a chord bar, which you can read about elsewhere.


PolyHarp uses a special notation to help you describe an interval. Intervals are used in PolyHarp when creating Chords Types, the Chord Bars, and retuning. Here are the ways you can describe an interval in PolyHarp:

Standard Names
You can use these preset terms to describe an interval in PolyHarp:

Interval degree terms. Many of these terms are enharmonic: they describe the same interval, but in different keys. These resolve to a 12EDO intonation system. These term names can be in upper or lower case!

Term cents description
I 0 cents the root interval (no transposition!)
I♯ 100 cents n augmented root
II♭ 100 cents a diminished or minor 2nd
II 200 cents a major second
II♯ 300 cents an augmented second
III♭ 300 cents a minor third
III 400 cents a major third
III♯ 500 cents an augmented third
IV♭ 400 cents a diminished fourth
IV 500 cents a fourth
IV♯ 600 cents an augmented fourth
V♭ 600 cents a diminished fifth
V 700 cents a perfect fifth
V♯ 800 cents an augmented fifth
VI♭ 800 cents a diminished or minor sixth
VI 900 cents a sixth
VI♯ 1000 cents an augmented sixth
VII♭ 1000 cents a diminished or minor seventh
VII 1000 cents a seventh
VII♯ 1100 cents an augmented seventh
I♭ 1100 cents a diminished root
off,? The interval is 0, or in other words, it turns it off.

Just Ratios
Almost all literature which discusses consonance, harmonics, and intonations usually has a large class of intervals specified as ratios. Systems of intervals using only rational intervals are known as just intonation systems.

A just ratio is specified as a fraction like 4/3, 7/4 or 12/1. You can be a little lazy in PolyHarp, and specify a harmonic as N/, like 15/ , meaning 15/1.You can actually use non-integers here also, like 4.5/3.

A cent is specified as a real number, based on 1/1200th of an octave. Many references use cents to describe an interval. I often use the character "¢" to save some screen space, but an interval specification does not use it, because it's hard to type. For example: 550.0, 1330.234. Remember, these are intervals, not frequencies!

Equal Temperaments
In PolyHarp, you can divide any interval equally, and describe degrees (multiples, really) of that interval. You specify the degree, followed by a colon (:), followed by the number of equal divisions. For example:
  • The third degree of a 19-tone EDO would be written 3:19, and would be equivalent to 189.47 cents.
  • The 22nd degree of 53 equal would be 22:53, (498.11 cents). Again, you are not restricted to integers, so 4.5:12 is fine (and equivalent to 9/24, but you may want to use decimals instead for clarity).
  • You can go a step further and specify the interval that gets divided by placing its description after an '@', as in 3:4@7/6, which is the third degree of a 7/6 divided into 4 equal parts (and at 200.15 cents, darned close to II (at 200 cents)).
  • The 0th degree of any equal division is always the same as the root, but it may help you to say 0:19 instead of I or 0 or 1/1, which are also names for a root.

Powers Of Primes Notation
Because factoring a just interval provides some insight into its harmonic relationships with other intervals, I've made up a new way to specify a number so that you don't have to do so much math to figure out the ratios of complicated just intervals.
PolyHarp will never choose this on its own, it'll just do the math, but this will simplify some calculations and clarify them.

Unlike normal numerals in base 10, which add up successive multiples of powers of 10 , this notation multiplies successive powers of primes. Each prime's power is separated by a ";", (ugly, but it's on the numeric keyboard), and which power it is increases from right to left, the way powers of 10 increase right to left in decimal notation.

PolyHarp supports primes up to 127, which is rather a lot, considering consonance is happiest with small primes.

You don't have to type "0" if the number has no factors for that prime. Also, you can use negative powers and real numbers for some truly perverse intervals.

A side effect of this is that a simple ";" is how to specify "0" (;0 would be 1), and there is no way to create negative numbers.

So, for example, here are some popular numbers expressed this way:


and here are some more examples showing fractions and roots:

Decimal3/2 cube root of 25/79/827/64
Power 1;-1;0.333333-1;1;;2;-33;-6

Remember, this is just another way to express a number, so you don't have to figure out factors between just ratios that have been transposed. As you can see, a negative number in a numerator is like putting its absolute value as a denominator.

For example, to transpose 3/2 (1;/;1) by a 15/8 (1;1;/;3), you just add the "places" of the PoP number" 1;2;/;4, which works out to 45/32 . Transposing by octaves means fiddling with the 2's place.

This feature is completely optional! Feel no obligation to use it!



PolyHarp is a very tag-friendly program.
Tags can be applied to PolyHarps (.polyharp patch files) and Chord types (.phchord files).
As used in many other systems, tags are metadata which help describe the actual data. Tag searching is often made so that a logical combination of tags is used to winnow down a large list of things. PolyHarp expands this somewhat by allowing some tags to be parameterized , so that rather than just searching for a combination of tags, you can also make some simple comparisons on tag values.

PolyHarp file Tags

In the case of patch file tags, you can search on ratings, number of string areas, and how many divisions of an octave it may be using.
For example, the search string "edo:>12" can be used to find PolyHarps that are tagged as having more than 12 divisions of an octave.

When you want to add or change tags on a PolyHarp file, the keyboard conveniently has a list of the tags in a list over the keyboard. THe same is true for searching tags.

PolyHarp also creates tags dynamically for more specific searches.
You can also reverse the sense of a tag in a search by prefixing it with "!". Tag keys themselves are case insensitive, but the values are not, unless it's for author, name, or description.
PolyHarp also automatically creates tags for "today" and "yesterday".

Here is a more technical look at tags:

User-created tags are comma delimited, and case insensitive. If they have a ":" in them, the values will be searched for as an integer. That way, you can make up a parameter tag, and query it.

Each PolyHarp's metadata gets turned into searchable tags with these names:

Tag What it stands for Notes
name: Name searches for a substring
desc: Description searches for a substring
author: Author searches for a substring
cdate: Creation date searches as a date
mdate: Modified date searches as a date
rating: Rating searches as an integer
version: Version searches as a string
sac: String Area Count searches as an integer
cbc: Chord Bar Count searches as an integer
ro Read-Only used in the distributed PolyHarp files
rw Read-Write these are custom PolyHarp files
today made today a dynamically created tag
yesterday made since yesterday a dynamically created tag

Most of this is self expanatory, but date searches can be tricky. You can specify a complete date like "2015/12/22T12:45:22", but that can be cumbersome. You can instead use a shorter form like:

  • YYYYMMDD for year, month, day like 20160612 for June 12, 2016
  • YYYYMM for year,month like 201702 for February 2017
  • YYYY for just the year

Normally, all the other parts of a date are set to the earliest qualifying date-time, but if you use < in the query, and one of these shorter dates, it fills out the rest of it with the last second of that period. So cd:<2017 means less than Dec 31, 2017 at a second before midnight Jan 1, 2018. A search seeking the PolyHarps made on a specific day (May 3, 2014) would be: cd:>20140503,cd:<20140503

The text fields for entering and searching for tags have been enhanced with a scrolling list of all possible tags. It's just a faster way to type them in, and also, selecting a few tags will comma delimit them. Parameterized tags like "rating:" will require you to provide a value, or a test if it's a search.

More Examples of patch tags and Searching

These search queries are to be typed into the search area over the list of PolyHarps.

Search query Explanation
ro show all read-only files
name:z show all files with a 'z' in their name
author:J H H L show files I authored (case insensitive value there)
today,!just files I made today without the 'just' tag
cdate:<2016 files created before 2016.


Polyharp can send MIDI messages instead of using its internal synthesizer.

Using MIDI is pretty simple: toggle the MIDI button and you clear the internal synthesizer, and start sending MIDI information instead to whatever is listening for it. All string frequencies, whatever they resolve to, are turned into the MIDI note it is closest to, so you will lose all microtonal information.

  • Each string area can be associated with a MIDI channel, and a MIDI program on that channel, so it will send that information and let you play several channel-specific MIDI instruments at once.

  • The Clear button sends Note Offs to all notes on all channels, because so few MIDI synths implement the "all notes off" message.

  • The Decay slider controls how long to wait before sending a Note Off for that string; otherwise you'd have a lot of stuck notes and never hear the decay portion of a note until it was damped by another chord.

  • The Dest button brings up a menu of MIDI destinations to send this MIDI stream to. You can use this to control which synthesizers are affected by PolyHarp's MIDI stream.

PolyHarp does not use any Microtonal MIDI commands - I feel thay are not supported widely enough, and the old trick of using pitchbends on separate channels - well, the less said the better! I do have microtonal synthesizers, I just plan my PolyHarp patches around them.



PolyHarp uses:

  • Audiobus By Michael Tyson & Sebastian Dittmann http://audiob.us
  • The Amazing Audio Engine by A Tasty Pixel
  • MIDIBus 1.35 by Nic Grant
  • JSONModel by Marin Todorov, http://www.touch-code-magazine.com
PolyHarp is by the author of the highly praised synthicity itself, SrutiBox, Droneo, Tondo, Wind Chimes, Enumero, Minute, Yes Session, Banshee, and LakePiano .

• Questions? Write to PolyHarp "at" jhhl.net, or go to the contact page
• Read about my iPhone development in this blog

© 2017 Henry Lowengard

AudioBus © 2012-2017 Audiobus. Thanks, Sebastian and Michael!

jhhl's iPhone Apps
Main jhhl.net website
© 2016 Henry Lowengard.