phg

I wanted to make a slower and more subtle music than what I’ve been making as of lately. Still I wanted for there to be changes, but just more gradual. Also I wanted to see if I could do something with fewer parameters which still felt interesting to me. I wanted to take a conscious step away from complexity and just present more of a phenomenon or a kind of state. I knew I wanted to come back to glass because it has a very distinctive sound to it which kind of reminds me of additive synthesis. I like how the transpositions add up and how the speed of the iteration follows suit. A while back I rescued the mechanical guts of a piano from an old piano technician that would have thrown them away otherwise. I’ve been slowly taking it apart and saving the felt hammers. For this recording I used one of those felt hammers on a fairly large glass bowl. It’s the kind you might use for a salad or maybe some fruit. The shape of the bowl is quite plain. It’s more of a kitchen utility. I got it for next to nothing at a thrift store a while back. I used my new mics real close and my regular setup with my mic pres and soundcard. I used the piano hammer and played real soft right in between the mics. One 3 minute recording at 192KHz. That little code block has a couple of connections between parameters using Pkey. I had the idea that I wanted there to be a gap in the range. I made that case sit up a little more as what it is by applying a lowpass filter at 200Hz only for that lowest octave. I also gave the low end a boost in amplitude. I’ve used linear mapping for this lately, and I think I prefer it now over exponential mapping for this kind of spectrum tilt despite that being counterintuitive.

~clean.lsf("~/snd/phg")
(
Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(3626,
Pbind(*[
type: \cln,
snd: \phg,
dur: Plprand(4.0, 8.0),
legato: 199,
spd: Pdup(Plprand(1, 3), Plprand(1/32, 7.0).round(1/12)),
octave: Pkey(\spd).linlin(1, 1/16, 4, 5),
lpf: Pkey(\octave).linlin(4, 5, 200, 20000),
rel: Pkey(\spd).linlin(1/32, 7.0, 180.0, 90.0),
crv: -4,
pan: Pwhite(0.0, 1.0),
amp: (Plprand(0.75, 1.5) / Pkey(\spd).linlin(1/16, 4.0, 1/8, 4)).trace,
cav: 1/2,
])
)
).play;
(17 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

thb

A while back I borrowed two ebows from a friend who lives close to where I live. That got the grand total up to three ebows for a while. At first I tried my big Zither thinking that it would work well with changing to new strings a lot. That was not working, so I went the other route and I got out my smallest little red Zither that I bought for five euros at a fleamarket in Berlin a long time ago. In some weird way I feel like that is my best one. I have the strings all tuned real low on that one. I lined up all three ebows at the bridge end of the Zither and then slowly moved one at a time a tiny bit forward. Because the strings are tuned so low there’s all kinds of strange glissandos and interactions between the ebows and the strings. The ebows themselves assume the role of preparations, interfering with the strings physically. I made the recordings with my Line Audio CM4’s, because this was a while back, so I didn’t have the new mics yet. It was tricky to get a good placement of the mics because the Zither is so tiny and it was very crowded with ebows all over it. I got the mics as close as I could. Later, when I was doing the editing, I decided that the stereo field was off somehow, in a way that is hard to explain. After I had something cooking with the code I went back and split the two stereo files from the two takes apart, and that made everything better. I think that is cool. You have two takes, and each take has two mono versions with slightly different phase information in them. The sample rate resolution is 192KHz. When I had originally made these recording and got halfway working on the code, I put the piece to one side, because I felt I had already done Zither, and that I should focus on getting other instruments recorded. I love working with Zithers though and now that I’ve done some work putting together some ensemble music, I don’t think that’s a problem any more. Different styles of playing with different preparations yield very different sounding results, even though the recordings might be done on the same instrument. I am very happy and grateful that I get to do whatever I want to do when I am making music. One take is a about 15 minutes and the other take is obout 19 minutes. In the code I ended up doing something a little new, for me at least, and I think that this little idea could prove very useful in future. I realised that I needed to change values for \cav, which is a global effect, much more often than I wanted to produce new events and trigger more samples to play back. I realized I needed to take care of that because in the beginning of the track I could hear the send into the reverb was being updated far too seldomely, so it sounded terraced. I did not want that for this music, so I came up with this Ppar wrapping around the two Pbind objects, with a single Pdef wrapped at the top to keep a single name for when I need to stop the carousel. The lower Pbind only handles the send into the reverb, which at that hastened update rate makes for a buttery smooth interpolation for the reverb send. Since it is a global effect, it works. It looks kind of strange like that I think, but that’s as few lines as I could get it to do the job in. I also took some time to add some form enhancing details on various keys. Especially in the introduction where a faint sound is heard in one channel, and then after a while the reverb starts filling out the empty channel. It’s subtle, but it’s there. I used various Pkey references and also deliberately allowing some Pseq objects to get stuck at various points. When I first encountered this behaviour in Pseq I regarded it as a kind of bug, or at least an unwanted outcome. Now it has become a valuable stategy instead. I enjoy noticing when I’ve changed my mind about things.

~clean.lsf("~/snd/thb");
(
Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(2883,
Ppar([
Pbind(*[
type: \cln,
snd: \thb,
num: Pxshuf((0 .. 3), inf),
bgn: Pwhite(0.0, 1.0),
atk: Plprand(30.0, 100.0),
hld: Pmeanrand(30.0, 100.0),
rel: Phprand(30.0, 100.0),
crv: Pdup(Pseq([1, 1, inf], 1), Pseq([8, 4, 2], 1)),
amp: Pseq([0.33, Pdup(Pwhite(1, 8), Plprand(0.33, 0.88))], inf),
dur: (300 / Phprand(1.0, 9.0)),
pan: Pseq([1, Pmeanrand(0.0, 1.0)], inf),
cav: 1.5,
cai: Pseg([0, 1, 0.5], 560, \wel, inf),
spd: Plprand(Pkey(\cai).linlin(0.0, 1.0, 0.5, 0.33), Pkey(\cai).linlin(0.0, 1.0, 2.0, 1.0)),
bnd: Pmeanrand(Pkey(\cai).linlin(0.0, 1.0, 0.0, -1.0), Pkey(\cai)) / 10,
bno: Pkey(\atk) + Pkey(\hld) + Pkey(\rel) / 2,
bnt: Pkey(\atk) + Pkey(\hld) + Pkey(\rel) / 2,
sustain: 300,
legato: 300,
]),
Pbind(*[
type: \cln,
snd: \sin,
amp: 0,
dur: 1/99,
cav: 0.75,
cai: Pseg([0, 1, 0.5], 560, \wel, inf).trace,
])
])
)
).play;
1050.wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

pno

I bought a tiny Piamino for real cheap. It only has 55 keys. It is not a good idea to try to move a piano on your lonesome so, I paid professional piano movers to bring it up the stairs to the apartment. I definitely think it was a fair price for what they did. After I got it into the livingroom I spent some time tuning the piano to get it roughly up to pitch. It was about a half step sunk. I went through and tuned it a bunch more times because I was curious if I could get it into a passable state. I could not. It’s real finicky work. You need to have gone to school for that kind of work. It just so happens I have a friend who I used to play in bands with who later went to school to learn how to tune pianos. He came over and I sat with him when he tuned the piano. It was such a trip. As a listening exercise it is really trippy is what I mean here. My friend did a really good job and the piano is at the time of writing still in tune. I need to be more precise with what I mean by in tune. I’ve come to regard the piano as an instrument to be very strongly entangled with the way that it is commonly tuned. That tuning is ET12. Not only that but there is also a kind of stretching that is most prononuced in the lower register. I wanted to have access to that. Playing it now, in a particular way, with the softening pedal pressed down, and with a light touch, I am reminded of the first pinao I ever had access to as a kid. It was at my aunt’s house. I knew I had to have that most common of tunings because that’s how my aunt’s piano was tuned. I sat and noodled with that kind of “composer’s piano”, playing softly, for long stretches. I started to notice that the mechanical action of the keys are different when played very softly. It affects the speed at which you can play new notes, I’m guessing it’s because the hammer does not have time to travel back all of the way. There is a delicate way of playing that can be reached there. A way of playing that is unique to this particular instrument. I recorded C’s in four octaves. I felt that struck the balance I am looking for. Sampling every key five times at different velocites is not what I want to do. In the recordings I made I oscillate both in tempo and velocity over that threshold which is unique to that particular key, which in turn affects the phrasing, as the hammer at times does not have time to fall back entirely before being pushed forward again. Each recording is a different length somewhere between two and three minutes. This was a very strong experience. It felt very hypnotic and eerily familar somehow. Like reliving something vaguley recolleceted from childhood. The mind couldn’t really remember. Not in any susbstantial detail, not really. It was more of a feeling. Thinking back now I think of it more as a ritualised channeling than anything else. I finally got those new microphones I’ve been waiting for and used them to record. They are a matched pair of Sennheiser MKH-8040. They are the best microphones that I have ever gotten a chance to use. Last time I had access to them was when I did my master. So now I have the complete kit. The mics, preamps and soundcard that I like. Nice feeling of wholeness. I put the microphones extremely close. Right up next to where the hammer meets the string. I changed up the microphone positioning for each of the recordings. There are four samples recorded at 192KHz. In the code there was a tricky bit that took a while to get right. I think now once I have the solution I foresee having use of it in future. The problem I had was that when low notes got chosen and held for longer durations the music got a kind of empty feeling to it. I got around that by having pitches under a certain threshold multiply the durations by a factor of eight. This led to an increase in amplitude and in strain on my CPU when there were longer passages with this fast material. I wanted to have some of those fast low notes be rests instead, so that I could thin the music out a little for just the low fast notes. I got in trouble for a bit and I couldn’t figure out why it wasn’t working and in the end I figured out it was because of order of execution. The type: key is always the first thing I set so it is such a common pattern I couldn’t think outside of that. It looks weird to me to have that key all the way at the bottom but that’s how it needs to be. Otherwise it makes up it’s own value for duration. The default is 1 and that does not give an error and was tricky for me to work out. I am imagining this could be used as a kind of life insurance or speed limit. In certain situations it would be better for me to generate pauses instead of totally choking up my CPU.

~clean.lsf("~/snd/pno")
(
Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(2356,
Pbind(*[
snd: \pno,
atk: 15.0,
hld: 15.0,
rel: 15.0,
crv: 0.0,
bgn: Plprand(0.0, 0.5),
scale: Pdup(Plprand(999, 9999), Pxshuf([
Scale.ionian,
Scale.superLocrian,
Scale.lydian,
Scale.phrygian,
Scale.neapolitanMajor,
Scale.dorian,
Scale.mixolydian,
Scale.locrian,
], inf)),
degree: Pdup(Plprand(19, 199), Pwhite(-7, 0)),
octave: Pdup(Plprand(29, 299), Pwhite(3, 5)),
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
frq: Pfunc{|ev|ev.use{ev.freq}},
dur: (Pseg(Plprand(30.0, 40.0), Plprand(30.0, 90.0), \wel, inf) / 256
/ Pkey(\frq).expexp(66, 67, 8, 1)),
num: Pdup(Plprand(9, 99), Pxshuf((0 .. 3), inf)),
pan: Pmeanrand(0.0, 1.0),
amp: Pseg(Plprand(1/4, 1/2), Plprand(30.0, 90.0), \wel, inf),
cai: Pseg(Phprand(0.1, 1.0), Plprand(30.0, 90.0), \wel, inf),
cav: 1/3,
legato: 699.0,
stretch: Pseed(0, Pseg(Plprand(1.0, 3.0), Plprand(30.0, 90.0), \wel, inf)),
type: Pfunc {arg event;
if (event.dur < 0.02) {
[\cln, \rest].choose

} {
\cln
}
},
//aux: Pseed(1, Pxshuf((0 .. 10), inf)),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
//s.stopRecording
}.play
)

cbg

A while back I found a cigar box guitar for real cheap at a second hand store close to where I live. It was handbuilt. I think whoever made it spent a lot of time on it, but in the end regarded it as a disappointment. It took me quite a while to figure out how to play it and get good recordings out of it. It is not very loud. I think that has something to do with the rather small and thin balsam wood box, which also lacks a sounding hole. Another interesting design choice is the bridge which is made out of metal. The bridge is slanted at an angle and the way the broom handle is set through the box lets the string have quite a bit of close proximity to the rather elongated bridge. The result is a metallic buzzing sound. At first this was a lot more subtle because I was playing it with a pick and trying to get different pitches out of it by placing my left index finger on the string and resting it against the broom handle. This made the string muted and the sustain very short. I tried it with an ebow. Took me a while to realize that the ebow needed to be propped up on one side to get to the right height without muting the string when the instrument was laid on it’s back. It was starting to sound good at that point, but it was still too faint. I dug out an old idea I had years ago. I soldered together three 9 volt battery clips so that they can supply the ebow with 18 volts coming from two 9 volt batteries. This works fine and is probably sort of what the Bass ebow is doing. The string got a little too chaotic with all of that juice at low tensions, so I added a voltage regulator in between the batteries and the ebow. This way I could dial in the voltage somewhere between 9 and 18 volts. It really felt like a goldilocks kind of just right state. I tuned the string as low as I could without the fundamental falling apart and then tuned it up to the nearest et12 semitone. I then proceded to record in my usual way at 192kHz. I got the mics real super close to where the front of the ebow was, about halfway up the box. I was real particular about tuning it and I made 90 second takes. Each one of these tensions yielded a unique interaction between the string and the ebow that I really got a kick out of. So I made one recording for each semitone. I got up to 17 of them, then the tension got too high and the signal coming from the string got too low to record properly. I also did not want to break the string as I think it would be difficult to replace given the design of the instrument. Added a bit of fading in and out and there you go. In the code I finally got to use the sequencing the tunings and the scales separately trick that I had been waiting to make use of for a while. In a way I kind of ruined it by having the num key actually do chromatic(\et12) transpositions. For the longest time things where not working, but then after days of thinking about it I remembered the old Feldman trick of slowing things down until I got everything to my liking. I also fought for a long time to have this one in a higher register but I was not feeling it. Taking the whole range down an octave really helped. I think it’s that metal bridge with that great buzzing sound that got me in trouble there for a while. It’s a wild sound and it has all of this high frequency energy going on inside of it.

~clean.lsf("~/snd/cbg");
(
var scales = Pseed(0,
Pxshuf([
Scale.augmented,
Scale.bartok,
Scale.minor,
Scale.harmonicMinor,
Scale.mixolydian
], inf)
).asStream;

Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(1240,
Pbind(*[
type: \cln,
snd: \cbg,
num: Pdup(Plprand(1, 15), Phprand(0, 16)),
dur: Plprand(1.0, 8.0) * 3,
bgn: Plprand(0.0, 0.5),
tun: Pdup(Plprand(10, 20), Pxshuf([
Tuning.pythagorean,
Tuning.just,
Tuning.sept1,
Tuning.sept2,
Tuning.vallotti,
Tuning.wcSJ,
], inf)),
scale: Pdup(Plprand(10, 20), Pfunc {|ev|
var scale = scales.next;
scale.tuning = ev[\tun];
"% : %".format(scale.name, scale.tuning.name).debug('scale');
scale;
}),
degree: Pdup(Plprand(10, 20), Plprand(0, 7)),
octave: Pdup(Plprand(10, 20), Pmeanrand(3, 5)),
mtranspose: Pdup(Plprand(111, 222), Plprand(-5, 2)),
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
frq: Pfunc{|ev|ev.use{ev.freq}},
legato: 999,
sustain: 999,
atk: Plprand(9.0, 15.0) * 2,
hld: Plprand(11.0, 17.0) * 2,
rel: Plprand(7.0, 13.0) * 4,
crv: Phprand(2.0, 6.0),
pan: Pdup(Plprand(1, 2), Pmeanrand(0.0, 1.0)),
amp: (Pseg(Plprand(1/3, 1/2), Plprand(15.0, 115.0), \wel, inf)
/ Pkey(\frq).expexp(130, 523, 0.75, 1.0) * Pkey(\num).linexp(0, 23, 1, 3) / 3).trace,
cav: 2/3,
cai: Pseg(Phprand(0.0, 1.0), Phprand(90.0, 180.0), \wel, inf),
//aux: Pseed(0, Pxshuf((0 .. 10), inf),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording
}.play
)
)

vcl

A friend from England came to stay in the apartment during a guest composer residency at EMS. A buddy of mine who lives nearby lent a Cello to my friend from England for the duration of the residency. I negotiatied to hang on to the Cello for a lil bit after my friend from England left, before giving it back to my buddy who lives near by. This allowed me to make some recordings with the instrument. It was fun to play it, and I got all hopnotized playing the lowest open string. I sat up my usual dual soundcard rig. I placed one microphone real close right at the bridge, and one microphone real close at the edge of the fretboard. Both microphones faced flat onto the string. These two signals I then panned hard left and right and increased the width of the stereo field in post. I got pretty far into making music before I felt I had to go back and edit out the bow changes. I kept at it making the music with no bow changes but then I realized that I needed to have some bow changes in there some of the time in order to measure out time. I felt as though I needed some fixtures in the scenery along the road, otherwise I felt I was stuck in place. I did some fun stuff in the code that I won’t usually do. I made some linear sequences of scale degrees. I wouldn’t call these melodies because I keep changing the scale. I made one sequence that starts on each one of the eight scale degrees I was using. These linear sequences all have their own amount of steps in them. That’s a little nod to isometric stuff there even though, as stated above, the switching out of scales adds this layer of interpretation on top there. All of the sequences deplete all of the eight scale degrees. This idea keeps coming back. I want to present all of the avialable pitches because it yields a kind of variation that I’m fond of. I connected the envelopes to the durations which then get stretched back and forth which gives the music a kind of breathing that I enjoyed. There are these peaks and valleys of density. The way this panned out felt fresh to me. There is some crosstalk between parameters there that gives the music a sense of direction. I exported two stereo file at 192kHz. One with bow changes and one without them. The latter is an edit of the former.


~clean.lsf("~/snd/vcl")
(
Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(10,
Pbind(*[
type: \cln,
snd: Pseq([\vcl, Pwrand2([\vcl, \r], [1, 2], 1)], inf),
num: Pseq([1, Pdup(Plprand(1, 8, 1), 0)], inf),
dur: Plprand(5.0, 11.0),
scale: Pdup(Plprand(15, 30), Prand([
Scale.ionian(\wcSJ),
Scale.mixolydian(\wcSJ),
Scale.whole(\wcSJ),
Scale.phrygian(\wcSJ),
Scale.bartok(\wcSJ),
], inf)),
degree: Pdup(Plprand(3, 7), Pxshuf([
Pseq([0, 3, 5, 4, 6, 2, 1, 4, 3, 6, 5, 7], 1),
Pseq([1, 0, 3, 2, 4, 3, 6, 5, 7], 1),
Pseq([2, 3, 0, 7, 5, 3, 4, 2, 5, 1, 3], 1),
Pseq([3, 7, 1, 2, 0, 6, 5, 4, 6, 7, 4, 2], 1),
Pseq([4, 5, 3, 2, 6, 1, 0, 7, 5, 6], 1),
Pseq([5, 4, 7, 6, 7, 3, 5, 1, 2, 0, 4, 5, 3], 1),
Pseq([6, 7, 6, 5, 6, 4, 5, 3, 2, 4, 1, 0], 1),
Pseq([7, 0, 6, 1, 5, 2, 4, 3], 1),
], inf)),
octave: Pseed(5, Phprand(4, 6)),
bgn: Pwhite(0.0, 0.9),
amp: Plprand(0.15, 0.55) * Pkey(\octave).linlin(4, 6, 1.5, 0.75),
crv: 0,
atk: Pkey(\dur) * 7,
hld: Pkey(\dur) * 3,
rel: Pkey(\dur) * 5,
legato: 999,
cav: 2/3,
pan: Pseq([0.5, Plprand(0.1, 0.9, 1), Phprand(0.1, 0.9, 1)], inf),
stretch: Pseg([1, 1/8, 1, 8, 1], Pmeanrand(20.0, 40.0), \sin, inf).trace,
//aux: Pxshuf((0 .. 10), inf),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

vcl

A friend from England came to stay in the apartment during a guest composer residency at EMS. A buddy of mine who lives nearby lent a Cello to my friend from England for the duration of the residency. I negotiatied to hang on to the Cello for a lil bit after my friend from England left, before giving it back to my buddy who lives near by. This allowed me to make some recordings with the instrument. It was fun to play it, and I got all hopnotized playing the lowest open string. I sat up my usual dual soundcard rig. I placed one microphone real close right at the bridge, and one microphone real close at the edge of the fretboard. Both microphones faced flat onto the string. These two signals I then panned hard left and right and increased the width of the stereo field in post. I got pretty far into making music before I felt I had to go back and edit out the bow changes. I kept at it making the music with no bow changes but then I realized that I needed to have some bow changes in there some of the time in order to measure out time. I felt as though I needed some fixtures in the scenery along the road, otherwise I felt I was stuck in place. I did some fun stuff in the code that I won’t usually do. I made some linear sequences of scale degrees. I wouldn’t call these melodies because I keep changing the scale. I made one sequence that starts on each one of the eight scale degrees I was using. These linear sequences all have their own amount of steps in them. That’s a little nod to isometric stuff there even though, as stated above, the switching out of scales adds this layer of interpretation on top there. All of the sequences deplete all of the eight scale degrees. This idea keeps coming back. I want to present all of the avialable pitches because it yields a kind of variation that I’m fond of. I connected the envelopes to the durations which then get stretched back and forth which gives the music a kind of breathing that I enjoyed. There are these peaks and valleys of density. The way this panned out felt fresh to me. There is some crosstalk between parameters there that gives the music a sense of direction. I exported two stereo file at 192kHz. One with bow changes and one without them. The latter is an edit of the former.


~clean.lsf("~/snd/vcl")
(
Routine{
//s.record;
//1.wait;
Pdef(0,
Pseed(10,
Pbind(*[
type: \cln,
snd: Pseq([\vcl, Pwrand2([\vcl, \r], [1, 2], 1)], inf),
num: Pseq([1, Pdup(Plprand(1, 8, 1), 0)], inf),
dur: Plprand(5.0, 11.0),
scale: Pdup(Plprand(15, 30), Prand([
Scale.ionian(\wcSJ),
Scale.mixolydian(\wcSJ),
Scale.whole(\wcSJ),
Scale.phrygian(\wcSJ),
Scale.bartok(\wcSJ),
], inf)),
degree: Pdup(Plprand(3, 7), Pxshuf([
Pseq([0, 3, 5, 4, 6, 2, 1, 4, 3, 6, 5, 7], 1),
Pseq([1, 0, 3, 2, 4, 3, 6, 5, 7], 1),
Pseq([2, 3, 0, 7, 5, 3, 4, 2, 5, 1, 3], 1),
Pseq([3, 7, 1, 2, 0, 6, 5, 4, 6, 7, 4, 2], 1),
Pseq([4, 5, 3, 2, 6, 1, 0, 7, 5, 6], 1),
Pseq([5, 4, 7, 6, 7, 3, 5, 1, 2, 0, 4, 5, 3], 1),
Pseq([6, 7, 6, 5, 6, 4, 5, 3, 2, 4, 1, 0], 1),
Pseq([7, 0, 6, 1, 5, 2, 4, 3], 1),
], inf)),
octave: Pseed(5, Phprand(4, 6)),
bgn: Pwhite(0.0, 0.9),
amp: Plprand(0.15, 0.55) * Pkey(\octave).linlin(4, 6, 1.5, 0.75),
crv: 0,
atk: Pkey(\dur) * 7,
hld: Pkey(\dur) * 3,
rel: Pkey(\dur) * 5,
legato: 999,
cav: 2/3,
pan: Pseq([0.5, Plprand(0.1, 0.9, 1), Phprand(0.1, 0.9, 1)], inf),
stretch: Pseg([1, 1/8, 1, 8, 1], Pmeanrand(20.0, 40.0), \sin, inf).trace,
//aux: Pxshuf((0 .. 10), inf),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

gvs

The other day when I was making the rounds to the local second hand shops and flea markets, like I do. In the middle of the vaguely familar, there stood upon a shelf a golden vase. It was of some unknowabale alloy. Probably copparish in reality, but the neurons in charge of finding gold tones clearly won out. I took my headphones out of my ears, held the vase close to one ear and struck it softly with the palm of my hand. I could tell it was special. Very resonant. Later, when I got home, I used a cartoon-chicken-yellow electric oatdrank latte wisk on that golden vase. The metal spool on the wisk has come halfway off of the rod. This made for a very interesting recording, as I have come to realize more and more of late, metal on metal action has a ton of that high frequency energy I am looking for. The signal chain during recording was as is now custom. In post I added a small increase in energy at 32Hz and applied a tiny bit of transparent limiting, being careful to keep as much of the dynamics as I could. I exported a single stereo file at 192kHz.

~clean.lsf("~/snd/gvs")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(2,
Pbind(*[
type: \cln,
snd: \gvs,
dup: Plprand(5, 11),
dur: Plprand(1.0, 9.0),
scale: Scale.minor(\just),
degree: Pdup(Pkey(\dup), Plprand(0, 7)),
octave: Pdup(Pkey(\dup), Plprand(4, 5)),
mtranspose: Pwhite(-4, 4),
bgn: (Plprand(0.0, 0.5) + Pwrand2([0, 1], [50, 1], inf)).trace,
atk: Pkey(\bgn).linlin(0.0, 0.5, 1.0, 19.0),
hld: Plprand(19.0, 29.0),
rel: Plprand(19.0, 29.0),
crv: 6,
amp: Pseg(Plprand(0.125, 1.0), Plprand(15.0, 60.0), \wel, inf),
legato: 99,
pan: Pmeanrand(0.1, 0.9),
cav: 1,
cai: Pseg(Plprand(0.0, 1.0), Plprand(15.0, 60.0), \wel, inf),
hpf: Pwrand2([20, 5000, 10000], [8, 4, 1], inf) + Pkey(\bgn).linlin(0.0, 1.0, 0, 8000),
// aux: Pseed(0, Pxshuf((0 .. 10), inf)),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

rec

~clean.lsf("~/snd/rec")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(3565,
Pbind(*[
type: \cln,
snd: \rec,
drv: Plprand(1.5, 15.0),
dur: Pdup(Pkey(\drv).linlin(1.5, 15.0, 8, 1), Pkey(\drv)),
num: Pxshuf((0 .. 4), inf),
atk: Plprand(15.0, 45.0),
hld: Plprand(15.0, 45.0),
rel: Plprand(15.0, 45.0),
crv: Pmeanrand(-8.0, 4.0),
pan: Pmeanrand(0.1, 0.9),
bgn: Plprand(0.0, 0.1),
scale: Scale.chromatic,
degree: Pdup(Plprand(9, 21), Prand((0 .. 3) ++ (5 .. 8) ++ (10 .. 12), inf)),
legato: 32,
octave: Pmeanrand(1, 6),
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
frq: Pfunc{|ev|ev.use{ev.freq}},
amp: (Pseg(Plprand(1/11, 1/4), Plprand(30.0, 90.0), \wel, inf) * Pkey(\freq).expexp(65, 587, 2.0, 0.75)),
brf: 200,
hpf: 200,
cav: 1,
cai: Pseg(Phprand(0.0, 1.0), Phprand(30.0, 90.0), \wel, inf),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

met

I’ve been collecting bowls and various other metal objects from thrift stores for quite some time now. I for sure got the idea from first hearing and then playing with Henrik Olsson who is a truly gifted percussion player. I selected four of these metal objects and recorded myself playing them with a mallet. I used my usual double sound card setup. I tried to play in time, or in the same tempo within each take. I then actively tried to forget about the tempo I had used in the previous take. Which was not that hard to do, as it took me quite some time to reposition my two Line Audio CM3 microphones and set the gain for each take. There are four takes. These recordings went through quite a bit of post processing. I squeezed the dynamics in a couple of different ways using multiband and single band compression. I also spent quite a bit of time sculpting the transients. There was a lot of back and forth there. The four files all have their fade ins and outs baked in. I recorded and exported at 192kHz.

~clean.lsf("~/snd/met")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(5,
Ppar(
3.collect{
Pspawn(
Pbind(*[
method: \seq,
pattern: Pfunc{|ev|
Pbind(*[
type: Pwrand2([\cln, \r], [1, 4], inf),
snd: \met,
num: Pxshuf((0 .. 3), inf),
dur: 2.0 / Pdup(Plprand(3, 9), Plprand(9.0, 17.0)),
legato: 239,
pan: Pmeanrand(0.0, 1.0),
scale: Scale.chromatic(\sept1),
degree: Pdup(Plprand(1, 3), Plprand(-9, 3)),
octave: Plprand(3, 5),
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
frq: Pfunc{|ev|ev.use{ev.freq}},
amp: Pseg(Plprand(-16.5, -7.5), Plprand(5.0, 90.0), \wel, inf).dbamp /  Pkey(\frq).expexp(39, 294, 1, 2),
atk: Phprand(12.0, 16.0),
hld: Pmeanrand(8.0, 32.0),
rel: Phprand(16.0, 64.0),
crv: Pmeanrand(4.0, 8.0),
sustain: Phprand(32.0, 128.0),
bgn: Plprand(0.0, 1.0),
cav: 3,
cai: Pseg(Phprand(0.0, 1.0), Plprand(5.0, 90.0), \wel, inf),
hpf: Pseg(Plprand(160, 1200), Plprand(5.0, 90.0), \wel, inf),
fsh: Pdup(Plprand(3, 13), Pwhite(-5.0, 3.0)),
fsm: Pdup(Plprand(3, 13), Pwhite(-5.0, 3.0)),
hai: Pseg(Phprand(0.0, 1.0), Plprand(5.0, 90.0), \wel, inf),
hal: 0.75,
rts: 15,
hlp: 4000,
dla: 1,
dlf: 0,
dlt: 16,
dls: Pseg([Pdup(2, Plprand(0.0, 1.0)), 0], Plprand(5.0, 90.0), \wel, inf),
stretch: Pseg([Pdup(2, Plprand(1.0, 4.0)), 1], Plprand(5.0, 90.0), \wel, inf),
])
},
])
)
}
)
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

trp

~clean.lsf("~/snd/trp")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(206,
Pbind(*[
type: \cln,
snd: Pwrand2([\trp, \r], [1, 2], inf),
num: Pwrand2((0 .. 3), (4 .. 1), inf),
dur: 4 / Pdup(Plprand(1, 11), Plprand(5, 11)),
atk: 39,
hld: 29,
rel: 19,
crv: 6,
sustain: 89,
bgn: Pwhite(0.0, 0.75),
pan: Pseq([Plprand(0.0, 0.5, 1), Phprand(0.5, 1.0, 1)], inf),
scale: Pdup(Plprand(9, 29), Pxrand([
Scale.augmented(\just),
Scale.whole(\just),
Scale.mixolydian(\just),
Scale.ionian(\just),
], inf)),
degree: Pdup(Plprand(1, 9), Plprand(0, 7)),
octave: Pdup(Plprand(1, 9), Plprand(3, 6)),
mtranspose: Pdup(Plprand(1, 9), Pwhite(-5, 3)),
amp: Pseg(Plprand(1/16, 1/4), Plprand(75.0, 150.0), \wel, inf).trace,
cai: Pdup(Plprand(1, 11), Plprand(0.0, 1.0)),
cav: 2.0,
hpf: Pseg(Plprand(40, 400), Plprand(15, 90), \exp, inf),
brf: Plprand(20, 20000),
brq: Pwhite(0.0, 1.0),
brn: Pwhite(0.0, 1.0),
bro: Pwhite(0.0, 1.0),
])
)
).play;
60.wait;
Pdef(0).reset;
(2 * 60).wait;
Pdef(0).reset;
(4 * 60).wait;
Pdef(0).reset;
(8 * 60).wait;
Pdef(0).reset;
(4 * 60).wait;
Pdef(0).stop;
(2 * 60).wait;
s.stopRecording;
}.play;
)

gls

One morning as the old clock radio woke me, I heard a piece of music that included Glass Armonica. I was reminded I’ve been wanting to record glass for a long time. I bowed a glass with some water on my finger. It’s the kind you would use for water. The glass is quite thin. In the manufacturing the rim of the glass has been cut, so there is no ring on it, as is found on the other glasses in the kitchen. This glass was once in use as a water glass, but because all of the other one’s in it’s set have met with various accidents over the years, this is the last of it’s kind. It has been delegated to a bookshelf where it now houses various seedlings as part of a small flock of other orphaned glassware. I spent quite some time playing it, and gradually came to understand that a delicate balance between pressure and speed had to be upheld in order to not flood the timbre with too many overtones. I was able to salvage over two minutes worth of usable material from a much longer recording. I recorded in Mono using a borrowed Røde NT 1000 microphone and my regular combination of soundcards at 192kHz.

~clean.lsf("~/snd/gls")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(7,
Ppar(
7.collect{
Pspawn(
Pbind(*[
method: \seq,
pattern: Pfunc{|ev|
Pbind(*[
type: Pwrand2([\cln, \r], [5, 1], Plprand(5, 11)),
snd: \gls,
dur: Pdup(Plprand(5, 11), Phprand(1.0, 60.0)).trace,
scale: Pdup(Plprand(5, 11), Pxshuf([
Scale.harmonicMinor(\sept1),
Scale.romanianMinor(\sept2),
Scale.neapolitanMinor(\sept1),
Scale.minor(\sept2),
Scale.mixolydian(\sept1),
Scale.ionian(\sept2),
Scale.locrian(\sept1),
Scale.superLocrian(\sept2),
Scale.phrygian(\sept1),
Scale.bartok(\sept2),
Scale.whole(\sept1),
Scale.marva(\sept2),
], Plprand(5, 11))),
degree: Pdup(Plprand(1, 3), Plprand(0, 7)),
mtranspose: Pdup(Plprand(1, 3), Plprand(-5, 2)),
octave: Pdup(Plprand(1, 3), Plprand(2, 5), Plprand(5, 11)),
bgn: Plprand(0.0, 1.0),
pan: Pmeanrand(0.0, 1.0, Plprand(5, 11)),
legato: 70,
atk: Phprand(10.0, 30.0),
hld: Plprand(1.0, 10.0),
rel: Phprand(10.0, 30.0),
crv: 0,
cav: 2,
cai: Pwhite(1/8, 1/2),
amp: Pdup(Plprand(5, 11), Plprand(0.25, 0.75) * Pkey(\octave).linexp(2, 5, 1, 1/8)),
//aux: Pseed(0, Pxshuf((0 .. 11), Plprand(5, 11))),
])
},
])
)
}
)
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

tgt

I bought a used toy guitar for real cheap. The body is approximately an eighth of full size. Four steel strings. I laid it flat on it’s back and put an ebow on it. I tuned the two middle strings real low and the two outer strings high to get the ebow so close to the second string from the top that it’s touching the string in part of its oscillation. This gave it a kind of hurdy gurdy feel. I recorded it in Stereo at 192kHz and exported an octave lower at 96kHz. I enjoy how the cycle of the string’s contact with the ebow is played at different speeds for the different pitches. At times there are interesting polytempic interactions between the different layers. In the code I got back into using Pspawn which I haven’t used in a while and now I feel really good about this approach. I get the feeling that it is very CPU efficient.

~clean.lsf("~/snd/tgt")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(837,
Ppar(
99.collect{
Pspawn(
Pbind(*[
method: \seq,
pattern: Pfunc{|ev|
Pbind(*[
type: Prand([\cln, \r], 2),
snd: \tgt,
atk: Plprand(60.0, 90.0),
hld: Plprand(5.0, 15.0),
rel: Plprand(30.0, 60.0),
crv: -6,
bgn: Pwhite(0.0, 0.6),
pan: Pseq([Plprand(0.0, 1.0, 1), Phprand(0.0, 1.0, 1)], 2).trace,
scale: Scale.pelog(\just),
degree: Pdup(Plprand(1, 2), Plprand(0, 7)),
octave: Plprand(4, 5),
mtranspose: Phprand(-2, 2),
amp: Pdup(Plprand(1, 99), Plprand(1/64, 1/8)),
cav: 8,
])
},
])
)
}
)
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

bfn

Quite a while back I made an informal recording to try out a new kind of fan on my steel string parlor guitar. It’s a Levin. I’ve been trying to find a good fan to use on guitar for years and years. A long time ago there was a white little handheld fan called Draget that a bunch of improvisors all got at the same time. My favourite sound that came out of that is David Stackenäs’s. He did a whole concept album called Bow that came out on Kning Disk. On the record he only used that style of playing. It is strikingly beautiful. Focused and reduced to perfection. I did that first informal recording in mono with my handcomputer. The plan was always to do a proper recording later. I had done some work on the code but then I put it to the side. Months pass. Then one night I start messing with it again and I start to feel that it’s getting to where It needs to be so I decide to do that proper recording I had planned to do. I rig up my whole set up with the double sound cards. Out of that recording I get three good samples. One where I stay on the highest string. The sound I like is right on the second fret. There is something nodal there. The other two takes I move up through the strings and then the other way around. It’s wild. Extremely dynamic. When I swap out the informal recording I realize I need to keep that alongside the new material. I think that was interesting the way that worked out in the code on the num line. There are these two different colours in there this way. The informal mono recording is 44.1kHz. The other ones where recorded in Stereo at 192kHz and exported at half speed at 96kHz.

~clean.lsf("~/snd/bfn")
(
Routine{
s.record;
1.wait;
Pdef(0,
Pseed(940,
Pbind(*[
type: Pwrand2([\cln, \r], [1, 5], inf),
snd: \bfn,
dur: 0.125 / Pdup(Plprand(3, 13), Plprand(3, 13)),
num: Pdup(Pseq([1, Plprand(1, 4, 1)], inf), Pseq([Pxrand((0 .. 2), 1), 3], inf)),
atk: Plprand(9.0, 19.0),
hld: Plprand(9.0, 29.0),
rel: Plprand(9.0, 39.0),
legato: (Pkey(\atk) + Pkey(\hld) + Pkey(\rel) * 9999),
crv: Plprand(0.0, 8.0),
bgn: Pwhite(0.0, 1.0),
pan: Pdup(Plprand(5, 11), Pseq([Plprand(0.0, 1.0, 1), Phprand(0.0, 1.0, 1)], inf)),
scale: Pdup(Plprand(5, 11), Pxshuf([
Scale.harmonicMinor(\sept1),
Scale.mixolydian(\sept2),
Scale.whole(\vallotti),
Scale.romanianMinor(\mean4),
Scale.diminished(\mean5),
Scale.lydianMinor(\mean6),
Scale.dorian(\wcSJ),
], inf)),
degree: Pdup(Plprand(5, 11), Plprand(0, 6)),
octave: Pdup(Plprand(5, 11), Plprand(4, 8)),
mtranspose: Pdup(Plprand(5, 11), Plprand(-5, 2)),
amp: Pseg(Plprand(1/7, 0.65), Plprand(6.0, 60.0), \wel, inf).trace,
cai: Pseg(Plprand(0.0, 1.0), Plprand(15.0, 90.0), \wel, inf),
cav: 1/2,
fsh: Plprand(0.0, 10.0),
fsm: Plprand(0.0, 2.0),
bnd: Pdup(Pseq([1, Plprand(1, 4, 1)], inf), Pseq([Phprand(-0.25, 0.0, 1), 0], inf)),
stretch: Pseg([Pdup(2, Plprand(1.0, 16.0)), Plprand(1.0, 16.0)], Plprand(15.0, 90.0), \sin, inf),
])
)
).play;
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

snr

I’ve been trying to find a cheap used snare drum for a while now but I haven’t found one that I think would work for me. Then I got to thinking that just the snare part is cheap and that most likely I could use that as a preparation because I like rattly stuff and hey, a snare for sure does that. I made as long of a recording as my arm had strength for in one go. I shook the snare real close to my CM3’s. I recorded in 192kHz thinking that I would be using The Quincy Jones Trick later because I could hear straight away that it had this nice high pitch thin metal sound that I was real curious to hear played back slower. So I messed around with the code and after a while of changing up the numbers for the envelope times I felt I wanted those to always stay the same. Then I had the idea to connect the playback speed to the scaling of the envelope. So I switched over to Reaper and cut up the file and applied the amplitude envelope there. This gave me 26 files. Each file is 33 seconds in duration. I exported them at 48kHz. After a while Working on the code side of the things I realized that I needed to be able to calculate the duration for each sample at the different playback rates and to give that value to legato. There was some number juggling but I think that in the end it came out alright with that variable up top and that formula in the legato line at the bottom. This solution proly I will have use of again.

~clean.lsf("~/snd/snr")
(
Routine{
var a = 261.6255653005986232528812251985073089599609375;
1.wait;
s.record;
Pdef(0,
Pseed(238,
Pbind(*[
type: \cln,
snd: \snr,
num: Pxshuf((0 .. 25), inf),
seg: Plprand(15.0, 180.0),
dur: (3 / Pdup(Plprand(5, 11), Plprand(5.0, 11.0))),
amp: Pseg(Plprand(1/6, 6/9), Pkey(\seg), \wel, inf),
scale: Scale.chromatic(\sept1),
degree: Pdup(Plprand(3, 15), Plprand(-5, 7)),
one: Pseg([0.0, 1.0], 1140, \lin, 1),
octave: (Pdup(Pmeanrand(2, 17), Pmeanrand(2, 6)) + Pkey(\one).linlin(0.89, 0.9, 0, 2)),
fsh: Pdup(Plprand(3, 9), Plprand(-6.5, 7.5)),
fsm: Pdup(Plprand(2, 8), Plprand(-2.5, 3.5)),
cav: 2,
cai: Pseg(Plprand(1/8, 1/2), Pkey(\seg), \wel, inf),
stretch: Pseg(Pwhite(1/4, 4.0), Pkey(\seg), \wel, inf),
brf: Pseg([Pdup(2, Plprand(20, 20000)), Plprand(20, 20000)], Pkey(\seg), \sin, inf),
brn: Pseg([Pdup(2, Plprand(0.0, 1.0)), Plprand(0.0, 1.0)], Pkey(\seg), \sin, inf),
bro: Pseg([Pdup(2, Plprand(0.0, 0.5)), Plprand(0.0, 0.5)], Pkey(\seg), \sin, inf),
brq: Pseg([Pdup(2, Plprand(0.0, 1.0)), Plprand(0.0, 1.0)], Pkey(\seg), \sin, inf),
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
frq: Pfunc{|ev|ev.use{ev.freq}},
legato: a / Pkey(\frq) * 66,
])
)
).play;
(19 *60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

mtf

I bought a strange flute made out of metal for next to nothing. I bought it used like I try to do for most things. I recorded 16 takes of the same low note. But that’s not where I started. Lemme back up here. I was messing around with some Karplus Strong synthesis. It’s the stuff that sounds sort of like a string maybe, if you squint your ears. I was trying to solve something along the lines of interpolating to a stochastic value, then holding at that value for a variable duration, then interpolating to a new value from the held value. The thing kind of got away from me and became something else. A something else that I liked. I could hear that it had something, but I wanted to stay on track with this idea of making music out of sample packs. I put it aside for a while. Then I remembered a story a friend of mine told me about how one time he came up with a sound he liked from doubling up and letting some of the sawtooth wave he’d used to tune a string blend with the string. That package of the string and the sawtooth then went into the granulation, and that, was the sound. I mean it was just overdubbing in my case, but anyway, remembering that story made me think I should try to replace my Karplus Strong synthesis with this flute sound instead. I messed around and it took me a real long time to get the thing to stay in tune as I was playing it because, hey, I don’t really play wind instruments, but also because the thing is spectacularly poorly made and on top of that you can tell from lots and lots of dings all over it that it’s been through a lot. There is a piece of wood inside the mouthpiece that I think is supposed to be held in place by the metal but it has shook loose at some point so it’s real finicky. You gotta hit it just right with the air pressure or else it moves forward, at which point you get no sound, and you gotta shake it loose again. So I was doing that for quite a while to get the 16 takes of the same low note. I of course did the trick of recording at a higher sample rate (192kHz). Then slowing it down and exporting at (44.1kHz) like I’ve been doing for a while now. I will in future posts refer to this as The Quincy Jones Trick. After I while of trying to make it work I realized that it’s a good idea, but, wanting to keep both the string synthesis and the flute recording was not going to work out this time. I’m going to keep that on the backburner for the next phase, where I’m looking to make ensemble music out of these single sample pack log entries. I then ran into a bunch of trouble with the code. In the end I had to use factory style to make the thing fit this postcard size because I had three stems playing at different speeds and then I had the doubling on top of that. My initial thinking was to keep these postcard code block small in size but also very simple in terms of their content. It proved difficult to stick with that idea. Maybe in the future I could have another crack at refactoring some of these that got a little too big. Who knows, future me might have a few new tricks up his sleeve. So anyway, I ended up with six stems in total, but only three of them are meant to be unique in terms of pitch and duration information. The two different groups combine to form something together. I enjoy how the two halves have different filter and reverb values attached to them but the same pitch and duration material going through them. This is thanks to using the same set of seeds, so they’ll have this intertwined ebb and flow, getting brighter and darker. Also towards the end, the three darker stems (more often lowpassed and twice the amount of cav) make their exit before the brighter group. It might give a subtle sense of preample to the ending. I thought that was neat.

~clean.lsf("~/snd/mtf")
(
Routine{
1.wait;
s.record(numChannels: 4);
~arc = {|seed, snd, dur, amp, sustain, cav, aux, lpf, lhf|
var bin =
Pbind(*[
type: Pwrand2([\cln, \r], [1, 2], inf),
snd: snd,
dur: dur,
num: Pseed(5, Pxshuf((0 .. 15), inf)),
scale: Scale.mixolydian(\wcSJ),
degree: Pdup(Plprand(5, 22), Pdup(Plprand(1, 32), Pbrown(-9, 12, Plprand(1, 5)))),
pan: Pmeanrand(0.0, 1.0),
amp: amp / Pkey(\degree).linexp(-9, 12, 1, 3),
sustain: sustain,
cav: cav,
aux: aux,
atk: Plprand(8.0, 10.0),
hld: Plprand(8.0, 10.0),
rel: Plprand(8.0, 10.0),
stretch: Pseg(Pmeanrand(0.5, 1.0), Plprand(30.0, 90.0), \wel, inf),
lpf: lpf,
lhf: lhf,
calcFreq: Pfunc{|ev|ev.use{ev.freq.asStringPrec(48).postln}},
]);
Pseed(seed, Pseq([bin], inf));
};
Pdef(0, ~arc.(11, \mtf, 1/8, Pdup(Plprand(1, 5), Pseg(Plprand(-39.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(25.0, 50.0), 1, 0,
Pseg(Phprand(2000, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Phprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
Pdef(1, ~arc.(22, \mtf, 1/4, Pdup(Plprand(1, 5), Pseg(Plprand(-39.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(25.0, 50.0), 1, 0,
Pseg(Phprand(2000, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Phprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
Pdef(2, ~arc.(33, \mtf, 1/2, Pdup(Plprand(1, 5), Pseg(Plprand(-39.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(25.0, 50.0), 1, 0,
Pseg(Phprand(2000, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Phprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
Pdef(3, ~arc.(11, \mtf, 1/8, Pdup(Plprand(1, 5), Pseg(Plprand(-33.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(5.0, 10.0), 2, 1,
Pseg(Plprand(200, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Plprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
Pdef(4, ~arc.(22, \mtf, 1/4, Pdup(Plprand(1, 5), Pseg(Plprand(-33.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(5.0, 10.0), 2, 1,
Pseg(Plprand(200, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Plprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
Pdef(5, ~arc.(33, \mtf, 1/2, Pdup(Plprand(1, 5), Pseg(Plprand(-33.0, -15.0), Plprand(30.0, 90.0), \wel, inf)).dbamp, Plprand(5.0, 10.0), 2, 1,
Pseg(Plprand(200, 20000), Plprand(30.0, 90.0), \wel, inf), Pseed(2, Pseg(Plprand(0.05, 0.5), Plprand(30.0, 90.0), \wel, inf)))).play;
(17 * 60).wait;
Pdef(3).stop;
Pdef(4).stop;
Pdef(5).stop;
150.wait;
Pdef(0).stop;
Pdef(1).stop;
Pdef(2).stop;
240.wait;
s.stopRecording;
}.play;
)

smb

I recorded a small metal bowl which was suspended above a contraption called Rundgång that my friend Jon who is a master luthier made. It is a kind of testbed for feedback. It’s great. I’ve been beta testing it for Jon for a while now. It has a humbucker pickup, a strong amp and a speaker in it. I suspended some rubber bands just above the pickup and the speaker. I played this rig by slowly changing the amplitude and the timbre of the feedback via the contraption’s precise controls, which in turn changed the way the bowl vibrated and moved around. I enjoy how the small metal bowl is mostly caught in the magnetic field of the pickup but still has some degree of movement thanks to the rubber bands. Recorded at 96kHz using a Zoom H1 in extremely close proximity to the source.

~clean.lsf("~/snd/smb")
(
Pdef(0,
Pseed(19,
Pbind(*[
type: \cln,
snd: \smb,
frm: Pseg([0, 1], 1140, \lin, 1).trace,
dur: Pdup(Plprand(1, 11), Plprand(0.045, 4.5)),
bgn: Pseg(Plprand(0.0, 1.0), Plprand(18.0, 180.0), \wel, inf) + Pseg(Plprand(0.0, 1.0), Plprand(18.0, 180.0), \wel, inf),
legato: Pseg(Plprand(4.0, 32.0), Plprand(18.0, 180.0), \wel, inf),
tri: Pseg(Phprand(0.5, 1.0), Plprand(18.0, 90.0), \wel, inf),
shp: Pseg(Phprand(0.5, 1.0), Plprand(18.0, 90.0), \wel, inf),
sha: 0,
shi: Pseg(Plprand(0.5, 1.0), Plprand(18.0, 90.0), \wel, inf),
sho: Pseg(Pmeanrand(0.25, 0.75), Plprand(18.0, 90.0), \wel, inf),
slo: Pseg(Phprand(0.25, 1.0), Plprand(18.0, 90.0), \wel, inf),
hit: Pseg(Plprand(0.25, 1.0), Plprand(18.0, 90.0), \wel, inf),
lot: Pseg(Phprand(0.25, 1.0), Plprand(18.0, 90.0), \wel, inf),
fsh: Pseg(Phprand(0.25, 1.0), Plprand(18.0, 90.0), \wel, inf),
fsm: Pseg(Pmeanrand(-2.5, 2.5), Plprand(18.0, 90.0), \wel, inf),
rma: Pseg(Plprand(0.0, 0.5), Plprand(18.0, 90.0), \wel, inf),
rmf: Pseg(Plprand(20, 200), Plprand(18.0, 90.0), \wel, inf),
pan: Pmeanrand(0.1, 0.9),
rdf: Pkey(\rmf) / 2,
rdt: Phprand(3.0, 90.0),
atk: Pkey(\dur) * 3,
hld: Pkey(\dur) * 3,
rel: Pkey(\dur) * 3,
crv: 0,
lpf: Pseg(Phprand(2000, 20000), Plprand(18.0, 90.0), \wel, inf),
lhf: Pseg(Phprand(0.25, 0.5), Plprand(18.0, 90.0), \wel, inf),
spd: Pseed(Pkey(\frm).linlin(0.36, 0.361, 19, 21), Pseg(Plprand(0.5, 1.0), Plprand(36.0, 360.0), \wel, inf)),
nth: Pseg(Plprand(0.5, 1.0), Plprand(36.0, 360.0), \wel, inf),
amp: (Pkey(\frm).linexp(0, 1, 0.5, 1)
* Pseg(Pseed(Pkey(\frm).linlin(0.36, 0.361, 19, 22), Pmeanrand(-12.0, -3.0), Plprand(18.0, 90.0), \wel, inf))).dbamp,
zip: Plprand(18.0, 90.0),
ocd: Pseg(Phprand(0.5, 1.0), Plprand(18.0, 90.0), \wel, inf),
ocq: Pseg(Plprand(0.5, 1.0), Plprand(18.0, 90.0), \wel, inf),
dla: Pseg(Plprand(0.0, 0.5), Plprand(18.0, 90.0), \wel, inf),
dlf: Pseg(Plprand(0.0, 0.5), Plprand(18.0, 90.0), \wel, inf),
dlt: 16,
cav: 2,
cai: Pseg(Phprand(0.75, 1.0), Plprand(18.0, 90.0), \wel, inf),
cai: 1,
cvt: Pseg(Phprand(0.75, 1.0), Plprand(18.0, 90.0), \wel, inf),
cvd: Pseg(Pwhite(0.0, 0.25), Plprand(18.0, 90.0), \wel, inf),
cvl: Pseg(Phprand(0.0, 0.25), Plprand(18.0, 90.0), \wel, inf),
hpf: Pseg(Plprand(30, 200), Plprand(18.0, 90.0), \wel, inf),
smr: Pseg(Plprand(0.0, 0.6), Plprand(18.0, 90.0), \wel, inf),
])
)
).play;
)

zth

I recorded my larger zither with some preparations on it. Magnets and glass marbles. Four takes recorded in stereo at 192kHz, then transposed down to half speed and exported at 96kHz. There are a couple of low drones and then a couple of busier, prepared recordings in the folder. The scale material is a minor scale, but I added one sharp and one flat alteration in the degree parameter. The tuning is five limit just intonation. There are two different rooms. Also there is some octave down and quarter octave effects added, which at times can sound like a synth doubling the unprepared sounds. There is also some subtle ring modulation in a low range at times. I very much enjoy this added fizzy, torn paper kind of effect that the ringmodulaiton gives. I think it augments the prepared sounds nicely. The first event is unique in that it has its duration and attack doubled. This acts as a kind of intro. I am fond of this idea, as it offers me a way to amplify the sense of a particular point of departure, which is separate from how the material is presented in the rest of the finite unfolding of combinations of values.

~clean.lsf("~/zth")
(
Pdef(0,
Pseed(22,
Pbind(*[
type: \cln,
snd: \zth,
bgn: Plprand(0.0, 0.75),
num: Pdup(Plprand(0, 5), Pxshuf((0 .. 3), inf)),
crv: Pwrand2([Phprand(-3.0, 0.0, 1),
Plprand(0.0, 3.0, 1)], [1, 4], inf),
atk: Plprand(16.0, 64.0)
* Pdup(Pseq([1, inf],inf), Pseq([2, 1], inf)),
rel: Plprand(16.0, 64.0),
legato: 140,
dur: (Pwrand2([20, 22, 24], [4, 2, 1], inf)
/ Pdup(Phprand(5, 11), Phprand(5, 11))
* Pdup(Pseq([1, inf],inf), Pseq([20.0, 1.4], inf))),
octave: Pwrand2([2,3,4,5,6], [1,4,16,64,16], inf),
scale: Scale.minor(\just),
degree: Pdup(Plprand(1, 10),
Pwrand2([-6, -5s, -3, 0, 2, 4b, 5],
[1, 2, 4, 8, 4, 2, 1], inf)),
pan: (Pseq([Phprand(0.0, 0.5, 1),
Phprand(0.0, 0.5, 1)], inf)
/ Pdup(Pseq([1, inf],inf), Pseq([8, 1], inf))).trace,
amp: Pdup(Plprand(10, 100), Pwhite(-21.dbamp, -9.dbamp))
/ Pdup(Pseq([1, inf],inf), Pseq([1.5, 1], inf)),
ocd: Pwhite(0.0, 1.0),
ocq: Pwhite(0.0, 1.0),
cav: 1,
cai: Pseg(Pwhite(1/3, 23),
Pwhite(60.0, 120.0), \wel, inf),
hal: Pseg(Pwhite(0.0, 1.0),
Pwhite(30.0, 90.0), \wel, inf),
hhp: Pseg(Phprand(20, 10000),
Pwhite(30.0, 90.0), \exp, inf),
rts: Pseg(Plprand(1.0, 5.0),
Pwhite(30.0, 90.0), \exp, inf),
lpf: Plprand(20, 20000),
val: Plprand(20.0, 2000.0),
rep: Pkey(\val).explin(20.0, 2000.0, 10, 1),
hpf: Pdup(Pkey(\rep), Pkey(\val))
* Pdup(Pseq([1, inf],inf), Pseq([1.125, 1], inf)),
rma: Plprand(0.0, 0.5),
rmf: 152.25 * Pdup(Plprand(5, 50),
Pwrand2([1/4, 1/2, 1, 2, 4, 8],
[2, 4, 8, 4, 2, 1], inf)),
])
)
).play;
)

bbu

I recorded 183 very short transient sounds using bamboo kitchen utensils. I used the Audient iD14 as the preamp but recorded in a NI Komplete Audio 6 MK2 because the iD14 has way better preamps but only allows a maximum of 96kHz while the KA6 can go up to 192kHz. The recordings are not as clean as I’d like but they are ok I think. I need to get better microphones. I used a pair of Line Audio CM3’s, which I think are great for the asking price. They sound a lot more expensive then they are in the high end. They also really shine live because they can amplify a whole lot before starting to feed back. But hey, for recording these kinds of faint sounds, especially with the great iD14 pres, you end up hearing the noise in the microphones themselves. I tried denoising but that came out like complete mush. The room tone and the noise floor are all tangled up together in the tail there. I used a gate to gently sculpt the tail of the release and then slam shut. There are 183 stereo files exported at 192kHz in this pack. The files are all very short. All but one are under a second in duration.

~clean.lsf("bbu");

(
Routine{
s.record;
1.wait;
~pat = {| num, aux|
var pattern = Pbind(*[
type: \cln,
snd: \bbu,
dur: Pseg([1, Plprand(0.25, 4.0), 1],
Pwhite(30.0, 90.0), \sin, inf),
amp: Pseg([0.45, 0], Plprand(45.0, 90.0), \sin, 1)
- Pdup(Pseq([4, inf], 1), Pseq([0.45, 0], 1)),
pan: Pseg(Pmeanrand(0.0, 1.0),
Pwhite(30.0, 90.0), \sin, inf),
spd: Pdup(inf, Plprand(0.5, 1.0)),
num: num,
//aux: aux,
dur: Pseg([1, Pwhite(0.25, 1.0), 1],
Pwhite(30.0, 90.0), \sin, inf),
]);
Pseq([ pattern ], inf);
};

Pdef(184, Ppar( 183.collect{|patnum| ~pat.(patnum, patnum)})).play;

{
Pdef(184).reset;
exprand(15, 90).round.wait.postln;
}.loop
});
t.start;
(20 * 60).wait;
Pdef(184).stop;
2.wait;
s.stopRecording;
}.play
)

acf

I recorded an accordion’s lowest note, held for as long as I could sustain it. I chose the registration that had what sounded to me like the most overtones with a single tongue. I then mimicked the sound of the registration with the least overtones in post using a filter. This way the zero crossings are in the same place in the two files. Recorded and exported at 192kHz. The files are 2 minutes and 21 seconds in duration.

~clean.lsf("acf")
(
Routine{
//s.record;
1.wait;
(
Pdef(0,
Pseed(1467,
Pbind(*[
type: Pseq([\cln, Pwrand2([\cln, \r],
[1, 75], inf)], inf),
num: Pwrand2([0, 1], [1, 6], inf),
snd: \acf,
pan: Pwhite(0.0, 1.0),
baz: Plprand(150.0, 180.0),
crv: -8,
cav: 15,
cvt: 1,
cvd: 0,
cai: Pseg(Phprand(0.5, 1.0),
Pwhite(90.0, 180.0), \wel, inf),
dur: 1 / Pdup(Phprand(5, 11),
Phprand(5, 11)),
scale: Scale.melodicMinor(\wcSJ),
degree: Pwrand2([Phprand(-18, 0, 1),
Plprand(-8, 0, 1)], [1, 4], inf),
octave: Pwrand2([5, 6, 7], [4, 8, 1], inf),
mtranspose: Pseed(0, Pdup(Plprand(99, 1099),
Pseries(0, 1, inf))),
amp: Pdup(Plprand(1, 35),
Plprand(-18.dbamp, -15.dbamp)
/ Pkey(\degree).linexp(-18, 0, 1, 5)),
lpf: (Plprand(2000, 20000)
/ Pkey(\degree).linexp(-21, 0, 1, 5)).trace,
ocd: Pseg(Pmeanrand(0.0, 1.0),
Pwhite(60.0, 120.0), \wel, inf),
//aux: Pxshuf((0 .. 11), inf),
hpf: 80,
])
)
).play
);
(19 * 60).wait;
Pdef(0).stop;
240.wait;
s.stopRecording;
}.play
)

tap

I recorded a sine wave onto a cassette tape using a JVC UX-T20BK. When I played it back I recorded it at 192kHz. I then transposed it down to 44.1kHz and exported it. The file is 2 minutes and 36 seconds in duration.

~clean.loadSoundFiles("tap")
(
Pdef(0,
Pseed(183,
Pbind(*[
type: \cln,
scale: Scale.mixolydian(\just),
dev: Pwhite(-18, 34),
der: Pkey(\dev).linlin(-18, 34, 19, 1),
degree: Pdup(Pkey(\der),Pkey(\dev)),
snd: Pwrand2([\tap, \dfd], [5, 1], inf),
amv: Pwhite(1/2, 8.0),
amt: Pkey(\amv).linlin(1/2, 8.0, 10.0, 90.0),
amp: 0.3 / Pseg(Pkey(\amv), Pkey(\amt), \exp, inf)
/ Pkey(\degree).linexp(-18, 34, 1/3, 1.5),
dur: 1,
atk: Phprand(7.5, 15.0)
/ Pkey(\degree).linlin(-22, 34, 1, 2),
rel: Phprand(7.5, 15.0)
/ Pkey(\degree).linlin(-22, 34, 1, 2),
crv: 0,
bgn: Pwhite(0.0, 0.1),
pan: Pwhite(0.0, 1.0),
lhf: Pwhite(0.3, 0.6),
lpv: Phprand(20, 20000),
lpr: Pkey(\lpv).explin(20, 20000, 8, 1),
lpf: Pdup(Pkey(\lpr), Pkey(\lpv)),
hpf: Pseg(Plprand(20, 300), Plprand(20, 200), \exp, inf),
stretch: Pseg(Pwhite(1/11, 2.0),
Pwhite(10, 20), \exp, inf).trace,
cav: 1,
legato: Pkey(\atk) + Pkey(\rel) + 1,
tri: Pseg(Pwhite(0.0, 1.0),
Pwhite(10.0, 100.0), \sin, inf),
shp: Pseg(Pwhite(0.0, 0.25),
Pwhite(10.0, 100.0), \sin, inf),
sho: 1,
shi: Pseg(Pwhite(0.0, 0.05),
Pwhite(10.0, 100.0), \sin, inf),
ocu: Pseg(Pwhite(0.0, 0.5),
Pwhite(10.0, 100.0), \sin, inf),
ocd: Pseg(Pwhite(0.0, 0.5),
Pwhite(10.0, 100.0), \sin, inf),
])
)
).play
)

mrb

I wanted to make sure that I had gotten rid of that pesky bug where a little bit longer files would play back all rotten. Sounded like low sample rate. This was due to round off errors. I recorded my tele laid flat on my desk with an ebow and a little glass marble sat on top of it. The little glass marble connects two adjacent strings. I tuned down the strings a whole lot. I had to tune down the adjacent strings to get the ebow down real low so it’d be close enough to sustain the third wound string from the top. I propped up the head just so. Took a while to find the right angle where the ebow would make the string vibrate, which in turn made the marble move around within about half a fret’s worth. This gave me just the right amount of variation while still maintaining the fundamental. I recorded at 192kHz. The slightest fadein at the top of the file and right at the end I pick up the ebow off of the string. The file is 12 minutes and 13 seconds in duration. It’s a Mono file because I recorded straight out of the guitar into the soundcard. Didn’t even use a compressor.

~clean.loadSoundFiles("mrb")
(
Pdef(0,
Pseed(949,
Pbind(*[
type: \cln,
snd: \mrb,
spd: Plprand(1/4, 7.0).round(1/7).trace,
dur: Phprand(10.0, 20.0),
amp: Plprand(0.1, 0.9)
/ Pkey(\spd).linexp(1/4, 7.0, 0.5, 6.0) / 2.25,
bgn: Pwhite(0.0, 0.9),
atk: Pwhite(5.0, 30.0),
hld: Pwhite(9.0, 99.0),
rel: Pwhite(9.0, 99.0),
pan: Pwhite(0.0, 1.0),
crv: 8,
cav: 0.5,
])
)
).play;
)

bwm

Anything can be bowed. Even a black metal stove guard I bought for 10 sek at a thrift store one time ages ago. I finally got around to bowing it and found some ways to get some different sounds out of it. At first I thought the main thing was bowing the sides of the frame because that made the loudest sound in the room but once I got to listening through a condenser microphone up close I heard that there was more to the thin rod that ran between the ends of the frame. After a while of messing around with microphoe placement I tried it in combination with a bass humbucker pickup I had soldered an XLR jack to a while back. That was the sound. Tons of bass as well as really clean soaring high pitched sounds. Bowing at an angle made a big difference also in terms of controlling which node rang the loudest. In the end I opted for only using the pickup because it was the cleanest. Recorded in 192kHz. Did a tiny, tiny bit of very delicate denoising. Played back at half speed. Chopped up the recording into 8 mono files at aroundabouts 90 seconds each. Exported at 44.1kHz.

~clean.loadSoundFiles("bwm")
(
Pdef(0,
Pseed(293,
Pbind(*[
type: \cln,
snd: \bwm,
dur: Pdup(Pwhite(1, 3), Plprand(1/7, 13.0)),
num: Pxshuf((0 .. 7), inf),
atk: Phprand(1.0, 4.5) * Pkey(\dur),
hld: Plprand(1.0, 4.5)
* Pkey(\dur).linlin(1/7, 13.0, 1.0, 13.0),
rel: Phprand(1.0, 4.5)
* Pkey(\dur).linlin(1/7, 13.0, 1.0, 13.0),
crv: 0,
amp: Pdup(Phprand(3, 11), Phprand(1/11, 1/2)),
bgn: Pwhite(0.0, 1.0),
pan: Pwhite(0.0, 1.0),
cav: 1/2,
hal: Pseg(Pwhite(0.0, 0.5),
Pwhite(30.0, 90.0), \wel, inf),
dla: Pseg(Pwhite(0.0, 0.5),
Pwhite(30.0, 90.0), \wel, inf),
dlf: 0,
dlt: 16,
rts: Pseg(Pwhite(0.0, 9.0),
Pwhite(30.0, 90.0), \wel, inf),
spd: Pwrand2([1, 2, 4, 8], [12, 8, 4, 1], inf),
lpf: Pkey(\spd).linexp(1, 8, 20000, 20),
lhf: Pkey(\spd).linlin(1, 8, 0.5, 0),
hpf: Pseg([20, 200, 20, 20],
Pwhite(30.0, 90.0), \wel, inf),
scale: Scale.prometheus(\mean5),
degree: Pdup(Phprand(9, 19),
Pwrand2([0, 2, 4, 5], [8, 4, 2, 1], inf)),
])
)
).play
)

stn

I started off the day by recording some chuggy stunt guitar sounds in 192kHz. I made six short samples of the zeroth and first fret using three playing styles. Open long, open staccato and palm muted. I made two takes of all three styles and hardpanned them left and right. I denoised them, careful not to leave marks. I beefed things up a little bit while still keeping some of the dynamics inherent in the playing styles. I thought that I would be making some kind of chuggy rhythmically driven music, but that did not happen today as you can hear in the example below. Maybe some other day.

~clean.loadSoundFiles("stn");
(
Pdef(0,
Pseed(17,
Pbind(*[
type: \cln,
snd: \stn,
num: Pdup(Pexprand(1, 48), Pxshuf((0 .. 5), inf)),
dur: 1 / Pdup(Pexprand(2, 5),
Pexprand(1, 7).round) * Pwhite(1, 2) / 5,
amp: Pdup(Pexprand(1, 96), Pexprand(1/8, 8.0)),
atk: Pmeanrand(0.0, 1.0),
hld: Pmeanrand(1.0, 2.0),
rel: Pkey(\dur) * 8,
crv: Pdup(Pexprand(1, 24), Pmeanrand(-8.0, 8.0)),
lpf: 20000 - Pexprand(20, 20000),
pan: Pmeanrand(0.0, 1.0).trace,
lhf: Pexprand(1.01, 1.98) - 1,
bnd: Pwhite(-0.125, 0.125),
scale: Scale.chromatic,
degree: Pdup(Pexprand(1, 192),
Plprand(-18.0, 9.0)).round(0.5),
sustain: Pdup(Pexprand(1, 12), Pwhite(0.5, 4.0)),
spd: Pwrand2([-1, 1], [1, 64], inf),
cav: Pseg([0.0, 0.025, 0.0], 100, \sine, inf),
])
)
).play
)