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.

Download this sample pack here.

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

Download this sample pack here.


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

Download this sample pack here.


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

Download this sample pack here.

~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

I was looking for cheap instruments on used instrument sites, like I do, when I saw that you can get a Recorder for real cheap. Then I had a faint recollection that there might be a Recorder somewhere in the house, so I asked my wife who replied “I actually have two!” We had a go playing together. It is almost impossible to stay in tune while sustaining long durations. Overblowing is also a very likely outcome. This made for a very silly and fun little interaction. At that point I almost decided against trying to make one of these pieces, but then I thought that I should give it a try because I had identified it as a difficult task. I recorded using the same mics I always use, with the same double soundcard setup at 192kHz. In the end I exported the files two octaves down at 48kHz. I was listening in headphones with realtime passthrough when I was recording and it was impossible to get any kind of stability going at low pitch and amplitude with close micing, so I had to switch things up. I stepped away from the mics to the other side of the room and turned around so I was facing away from the microphones. The Alto Recorder was a total no go. The most stable pitch turned out to be the highest pitch on the Soprano Recorder. I recorded five breaths worth of that. I had to do a lot of editing, and as a result the files have different durations. That editing also led to some inconsistencies in how the waveforms lined up during crossfades which I felt was interesting. There are quite a few different crossfades throughout the five files which all ended up having their own unique little waverings. I have grown to understand that these kinds of imperfections are of great value later in the process when I stack a bunch of different transpositions on top of each other. I finally got around to using an old idea for scale material that I used to do all the time in the before times but now it’s been ages since the last time I did it. I used ten out of the twelve available pitches. I think any ten out of the twelve work. I just really dig that omisson of any two out of the twelve. I am happy I had a chance to come back to that idea and that I still feel that it works like a charm.

Download this sample pack here.

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

Download this sample pack here.

~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

I made some recordings of a trumpet I bought ages ago when the municipality was replacing it’s music school instruments and selling the old ones at an amazingly cheap yard sale. I had been putting it off for a long time because I knew that it would be difficult because I was never any good at playing the trumpet and my embouchure for sure is shot nowadays. Luckily I could utilize magics like doing many takes and, editing, lots and lots of editing. I scraped together 1 minute and 44 seconds worth of a single sustained note. It’s a Mono recording done at 192kHz. I used this broken Silent Brass mute which I was happy I still had kept back from when I used to play more. Even though the microphone inside it has given out, it is still the most silent trumpet practice mute I ever tried. It’s kind of like how an escalator that breaks down can still be used as stairs. I put this cheap little no name lapel microphone inside the mute and wedged it in tight with the cable coming out of the side of the horn, and it worked like a charm. I think it sounded better than I remember the microphone that came with the thing sounded. I kept some of the diminuendos that are due to me running out of breath in the recording, and that gave it this pulsing kind of thing that I really enjoyed. After struggling to get the kind of releases I wanted, I decided to bake them into the file so I made four copies of the file with four different fadeout lengths. In the code the thing that was new for me this time is a really old idea. I don’t remember exactly who told me this story but I’m pretty sure it was some kind of teacher from when I was in high school. It was about this conceptual art film where the film was looping and each time it looped it got one frame longer each time. I remember imagining how annoying that must have been to watch. In my code here the thing starts over after a minute, then two, then four, then eight. After that there’s a little bit of going backwards. So instead of addition my thing is multiplication and then a retrograde at the end. Not quite the same, but It felt nice to finally get around to hearing this idea put into practice. I was curious to see if it might lend a sense of form sort of creeping in to the listener, maybe on more of a subliminal level. It deals with memory in some way, as it is presenting the exact same material more than once. I have rarely, if ever done this in my music.

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

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

Download this sample pack here.

~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;

t = Task({
    { 
    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.

Download this sample pack here.

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

Download this sample here.

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

Download this sample pack here.


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

Download this sample pack here.

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

Download this sample pack here.

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