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

PolyHarp 1.0.1 (Dec 12, 2018)



PolyHarp is now available in the App Store!
See App Store Details


 

PolyHarp
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 once 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.

What is PolyHarp?



PolyHarp's Main Screen





Here are some somewhat old videos which will be replaced, but you can get the idea!:



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.

  ORIGINS

POLYHARP'S ORIGINS

I've been playing the Autoharp for more than 40 years. I have about 10 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.

 
  GLOSSARY

GLOSSARY

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 or other quadrilateral with virtual strings to strum.
 
  FEATURES

FEATURES

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!
 
  USAGE

USING THESE INSTRUCTIONS:

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

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.
 
  SYNTH

SYNTH

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

image

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 chosen 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:

image

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

image

Where you "pluck" the string (the strum), and how fast you pluck it (the velocity) can be used to further modulate 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.

Sources:

  • velocity
  • strum position on the string
  • Frequency of the string (7 octaves normalized to 0 to 1 by octave, that is, C0 is 0.0, C7 is 1.0)

Destinations:

  • volume
  • distortion
  • pan
  • pitch bend
  • MIDI CC01 (control wheel)

How the modulatation is applied:

  • "EACH": only the strings that have been plucked is modulated
  • "ALL": all the strings in the string area are mdulated

Each modulation links the source of modulation to a destination, mapped with a scaled curve. You can pick what kind of curve it is,

  • Linear
  • Square
  • Square Root
  • Midpoint (it changes immediately at the midpoint

and the curves effective ranges for its 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 pitch bends, for instance, are expressed in cents (+/- 1200 cents)

I'm experimenting with a special range control for setting these values. Just touch it and slide left and right to set it. You can also set the top higher than the bottom if need be: the shaded area will turn red. If you "long touch" it, it will reset to its default. It will quantize the value to something sensible, but moving the touch up or down will fine tune the offset of the current value. I may replace these with something else, but they are prety useful still.


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.

image

Envelopes

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.

Polyphony

The Polyphony stepper controls the maximum number of simultaneous oscillators that can be playing, currently 1000. 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. Doing this guarantees there is no voice stealing, which is when an oscillator is reassigned to a new string while it's playing!

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.

 
  PLAY MODE

PLAY MODE

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. If strings are running under the chord buttons, the buttons have priority if you slide or tap them!

You can load different PolyHarps by tapping the name under the word "PolyHarp", which will cause a large dialog box pop up. Read more about this in the Patch section.

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!

 
  CAPO

VIRTUAL CAPO

Real chorded zithers have the little 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 you don't have chords for. 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 touch it 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#, or 1:12, or 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 (!) or repeat on intervals that are not octaves, and so which octave the base frequency is matters when using those chords.

 
  EDIT MODE

EDIT MODE

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

This block:

PolyHarp in Edit Mode

Configures the setup of the current String Area. Read String Area to read about those controls!


Here are the various modes which interpret editing gestures differently , which you can pick from the radio control box.

Patch dialog

  • 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. Double tapping a Chord Button in this mode opens up a configuration editor. This mode also lets you create, delete, move, duplicate, resize and otherwise configure String Area properties.

PolyHarp in Edit Mode

This edit mode screen labels all the string areas and their corners. It also labels all the chord buttons.

  • The corners give you a little clue as to which corner it is - it may think it's a lower left corner when it's in the upper right, for example! The numbers are conceptually "inside" the String Area that it's associated with. You can drag around String Areas and their corners to make them arbitrary sizes and orientations. If you turn on the "quad" mode, you can make any four-cornered shapes. If you overlap some string areas' corners, you can drag them together and they will share the same spot.

  • 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: You can set that transposition interval by using the Tone_Spiral,
  • the button size: The Button sizer lets you drag around the lower right corner to make the shape of button you might like. You can even drag out of the box if you feel like it.
  • the Hammer, Lock, and Relative: these options toggle on and off.

    • Hammer makes the button into a hammer: every time you touch it, it plays all the 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

    • Lock means tapping it once keeps the bar down and locks off damped notes, or even does transposition on the strings "permanently." You can use it to damp out strings in other scales. Tap it again to unlock it. Lock bars have shield-like buttons.
      Lock Button

    • Relative means that the interval assigned to the button is applied to the base frequency, transposing the 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-shaped buttons, but with the edge a different color.
      Relative Button

  • one of two colors for that button,

  • whether the bar affects all the string areas or just some of them.
    Relative Button
    This way you can have different string areas play different chords, or keep one area playing a locked chord.

  • Learn You can associate a Chord Button with an on/off MIDI event, either a NOTE ON or a CONTROL. This way you can control Polyharp Buttons from an external MIDI controller.

    • Touch the "learn" button and play a note or control on a midi controller. When it's set, touch it again!
    • Tap on the label Next to "learn" and a dialog appears where you can set the MIDI command or Note that is associated with the Chord Button by hand. Select to clear the association.
      No MIDI MIDI
      Once a MIDI event is assigned to a Chord Button, it will display it at the bottom of the button:
      Relative 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.

    • 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 to make some really big 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 resizing circles have the string area's number in it in the quadrant that puts it "inside" the string area. If you overlap them or flip them, you can get an idea of which corner is which!

  • The Quad button frees the string area from rectangular constraints. You can make any four-sided harp now, even twisting and overlapping the strings. It can be flipped, upside down or twisted.

  • The Touch Mode button determines how a touch on the strings in this String Area is interpreted.

    • Strum means you have to strum over a string. Just touching it is not enough.
    • Tap means you can just tap a string and it will play it. Actually, it acts like a little strum of a range pixels under the tap, in order to be able to hit the string. The range depends on how hard you press on the screen - really, how wide the touch is.
    • Slap plays all the strings right away. Like slapping them with a ruler, or like using a "hammer on" Chord Button.
  • 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.
  • Clean is for helping to align Chord Button which is a strange process.

    • first you "collect" a series of Chord Buttons by dragging over them. It helps to be pretty far from the first button you collect. It's a little like sticking food on a skewer.
    • Then with two touches, you can evenly align a row of them. It takes some getting used to!
    • When the grid is on, the endpoints are aligned to the grid.
  • Create is for creating and deleting new Chord Button.

    • Tapping on a place outside of the "range" of an existing button will create a new button. the "range" is marked with a circle.
    • It makes a copy of whatever you edited last, or a default button.
    • You can tap on an existing button and then tap in a blank space to make an instant copy of it.
    • 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. In general, it's easier to do this in Move/Set mode.
    • If you tap four times, it removes all the buttons.

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. For instance, moving Chord Buttons or the whole set of Chord Buttons will snap them all to grid marks. String are corners can be snapped to the grid as well.

  • 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

 
  SKIN

SKIN CONTROL

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).

 
  STRING AREAS

STRING AREAS

String area controls

PolyHarp creates virtual strings in four-sided shapes called String Areas. There can be many String Areas on the screen, not just one! In Edit Mode, you can configure these String Areas, 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 String Areas, organized, say, by one or two octaves. If the chords of this Polyharp don't repeat, it will start with the lowest playable "string" that is in range.
  • How many actual "strings" correspond to each virtual string. You can make each course have up to seven differently tuned strings in it. See: Course View.

  • 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 shape! You can keep them rectangular, but also use the "QUAD" option to make them different 4-sided shapes and orientations.

  • The way it responds to your initial touch:

    • Strum: it waits until you strum a string to play it
    • Tap: a small span near the touch is played. If it's near a string, it plays it with the pluck position of where you tapped it.
    • Slap: it plays the whole area, again based on the poition of the tap.
    • with those last two, you can still strum afterward.

Chord Bars now can be associated to all String Areas or any combination of 8 of them (internally, more, but just 8 in the interface).

When you push a Chord Bar, all the strings in the String Areas are affected 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 or are separate devices!

 
  COURSE VIEW

COURSE VIEW

image

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

CHORD TYPES

Chord Types are named collections of intervals. For instance, a major chord (M) is a collection of the I, III, and V (0, 400, 700 cents) 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 logarithmic with respect to octaves. But sometimes, you want to move that string, or reuse it with several pitches. 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, or arrange them in chords as they are on a zither.

The On String string's physical location is as if 1/1 (0 cents) is based on C4. There may be a sensible way for these to repeat

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 marked 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).
    Tap a tag name and it pops matching chords types to the top of the list. You can 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. There's a special tag keyboard that comes up, and you can tap an existing tag to add it to the list!

Tone Spiral

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. There are guidelines that show you where some popular intervals are located on the spiral.

  • Add a new interval with the (+) button. It will be placed in the middle, unused 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 TET, which is pretty pervasive and easy to understand. This setting, though, always forces the interval to be between 1/1 and 2/1. For setting intervals in multiple octaves, which won't force it into 1/1 to 2/1, use Equal with an interval of 1:12.
    • 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 just scale. You can either type in part of a scale's description of one of the included scales, or choose one from the massive list which is comes up in a special keyboard when you change the name of the scale using its text field.

    It searches the Scala list as you type, and you can preview the intervals in the interval list on the left!

    There is a crude tagging system that lets you look for some characteristics of Scala scales:

    • Search for "#j" to find scales that only have just intervals (numerator/denominator) in them, or
    • Search for "#w" to find scales that are "wide" and have intervals out of the range of 1/1 and 2/1.
  • Equal, equal tempered scales, based on an interval unit you type in, like I or 1:19 or 1:5@5/4.

These are merely guides, you get to choose intervals out of them to make your own chord types.

  • Tone Spiral
    Using the Tone Spiral button, all the intervals in the guide, which is usually a scale, are turned into actual, editable intervals. Any existing intervals are usually removed first (unless the Transpose Button is active). 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. Perturb moves the pitch randomly within +/- 12.5 cents.
    • 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.
  • Transpose
    The Transpose button is used to transpose all the intervals simultaneously by the same interval. When it is enabled, touching any interval dot and moving it will transpose all the other intervals by the same amount. If snap is on, the other intervals are not snapped! This lets you take some unevenly spaced intervals and keep then that way.

If the Transpose mode is on and you tap the Tone Spiral button to create new intervals based on the guidelines, the new intervals will be added to the ones that are there! That way, if you want to make a few octaves of intervals, you can transpose, create, transpose, etc!

 
  FREQ VIEW

FREQUENCY VIEW

image

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.

 
  INTERVALS

INTERVALS

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 easily be compared to each other. PolyHarp does not constrain you to this range. More about that in the Chord Bar section.

INTERVAL USE IN POLYHARP

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.

NOTATION

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! To make typing easier, sharp can be expressed with '#' or 's', while flat can be expressed 'b' or 'f'.

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.

Cents
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 prime 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:

Decimal23456789101112
Power;11;0;21;0;01;11;0;0;0;32;01;0;11;0;0;0;01;2
Or...;11;;21;;1;11;;;;32;1;;11;;;;1;2

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. Using a negative number in a numerator is like putting its absolute value as a denominator.

For example, to transpose 3/2 (1;/;1 or 1;-1/) by a 15/8 (1;1;/;3 or 1;1;-3/), you just add the "places" of the PoP numbers together: 1;2;/;4 or 1;2;-4/, which works out to 45/32.

Transposing by octaves just means fiddling with the 2's place (the last place).

These Pop numbers are difficult to compare or do any math with other than multiplying, but they provide some insight into comparing consonance of intervals that the decimal system doesn't!

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

  TAGS

TAGS

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 as well as 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 using a scale with 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 when searching tags.

PolyHarp also creates a few 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, description, or text, which is a combo of all three.

PolyHarp also automatically creates tags for "today" and "yesterday" if there are patches or chords that were created then.

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
text the text of name, description, and author so you can match on them all
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
sa#: String Area Count searches as an integer
cb#: Chord Bar Count searches as an integer
built-in ro Built-in PolyHarps (read only) used in the distributed PolyHarp files
user-made rw PolyHarps saved by the user (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 cdate:<2017 means to look for objects created before the second before midnight Jan 1, 2018 (which to say, Dec 31, 2017 at 11:59:59). 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 list of all possible tags. It's just a faster way to type them in, and also, selecting a few tags will automatically comma delimit them. Parameterized tags like "rating:" will require you to provide a value, or a test if it's a search. there's a sidebar of buttons that let you clear (X) or type <,=,or > a little more easily.

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 example 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 the last secnd of 2016.
 
  MIDI

MIDI

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

Using MIDI is pretty simple: toggle the MIDI button and it clears the internal synthesizer, and starts 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.

Relative Button

PolyHarp does not use any MPE Microtonal MIDI commands yet. MPE support allows individual strings to bend independently to almost any amount and apply other channel-level changes to individual notes. The polyphony is limited to 15 at best though.

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. This is set up from the Edit Mode because that's how all parameters for String Areas are set.

Make sure the other apps you are sending to can run in the background! You can also send MIDI to a hardware MIDI interface.

Relative Button

  • The Route button brings up a menu of MIDI sources and destinations. You can use this to control which synthesizers are affected by PolyHarp's MIDI stream.
    Relative Button
  • 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 Volume slider now sets the maximum MIDI velocity sent for a note.

PolyHarp can also receive MIDI messages, but only uses them to associate MIDI Notes and Controls to chord buttons as switches. See Edit Mode for more details!

 
  CREDITS

CREDITS

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 .
 

Support
 
• 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
home
Main jhhl.net website
© 2016 Henry Lowengard.