j h h l . n e t |
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.
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:
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.
You can read about LYR and other old Amiga software of mine using this link.
PolyHarp's main features are:
USING THESE INSTRUCTIONS:
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:
When you start up PolyHarp, it tries to reload the last PolyHarp_patch that you were working with.
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.
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.
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.
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.
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.
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:
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.
This is a radio control that puts the editor into different modes, which interpret gestures differently.
There are three other buttons here:
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:
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.
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.
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.
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.
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.
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:
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.
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.
• 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!
© 2016 Henry Lowengard.