Author Archives: Oliver

Network no.1 for String Quartet

network_quartet

 I’ve mentioned the piece a couple of times on here over the last few months, but wanted to wait for a performance/recording to explain it a little more. So here we are at last: Network no.1 for string quartet.

The score is a hybrid of graphic and traditional, with a graph network diagram functioning as a map, and traditionally notated reference. Each ‘node’ on the map relates to an element from the separately notated gamut of sonorities. The edges of the map signify a potential route from one musical element to another. The length of an edge determines the duration of the element to be performed. So in this sense the map represents the time-space and structure of the piece, while the reference contains the sonic material.

As previously mentioned here, the work exists in a a state of non-linearity. Performers work independently, following their own paths across score ‘maps’. Routes are determined stochastically (and regenerated each time the network graphs are compiles), although each player may choose their own starting point.


The recording was made on Tuesday, 7th May, 2013.

Many thanks to the performers for their time.

Violins – Alice Dawkins; Hannah Packman

Viola – Katherine Lambeth

Violoncello – Claudia Chapman

Thanks also to Tony @Big_Pause for his patient advice during the programming stage.

Download the score generation used for the recording: Network no.1 – SCORE.pdf

 

Network no.1 proof-of-concept score

Making some (small) headway towards realising the string quartet I finished last month, I made a short realisation of the piece’s opening last night in standard notation.

As it is, the piece exists in a state of non-linearity, only becoming ‘fixed’ through the course of a performance. As such this standard, linear score destroys the stochastic nature, but is useful for me to better understand how a performance might unfold. I’ll post a more concise summary of the piece soon, along with the full-score.

network_1_handwritten

I tend to put up short posts, images, quotes etc. relating to my research and compositions on my tumblr, so follow that for a bit of a taste of my current work.

Network #1 – score finished.

So, just finished preliminary checks of my very first String Quartet scores. Quite exciting. Won’t post the full score just yet, but here’s a part of the Cello’s score: the network itself.

I’ll post a full breakdown at some point but essentially, nodes represent musical events (notated separately), edges represent durations for which the events are sustained, leading to the next.

Cello_graph_scoreMassive thanks to @Big_Pause for his invaluable help with the code on this one. Now to find a string quartet…

 

Beeblebrox and the Infinite Improbability Drive {Python}

Trying to deal with an issue in my first String Quartet where performers were being faced with a probabilistic decision… being that musicians are not computers (shame), I’m looking at pre-calculating these probabilities, whilst trying to find a way to keep my score system indeterminate (more on that later). Some code I knocked up today to calculate probabilities for weighted edges in a graph network.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
### Weighted outcome calculator for Network #1 (String Quartet #1)
# owmtxy, feb 2013 - python
# Input up to 5 probability percentages, and calculate a weighted outcome
 
import random
 
elapsed = 0
duration = 0 #int(input("Enter duration: "))
 
while(elapsed < 840): # While the elapsed time is < 14 minutes
    print("\nEnter probabilites, smallest first (0 for unused edges)...")
    # Enter each (accumulative) probability weighting (%)
    val1 = int(input("Weighting A: "))
    val2 = val1 + int(input("Weighting B: "))
    val3 = val2 + int(input("Weighting C: "))
    val4 = val3 + int(input("Weighting D: "))
    val5 = val4 + int(input("Weighting E: "))
 
    def makeRandom():
        randomVal = random.random() # Generate a random 'deciding' value
        randomVal = round(randomVal*100) #Scale it to a %
        return(int(randomVal))
 
    randomX = makeRandom()
    print(randomX)
 
# Compare the randomX value to the probability boundries:
    if(randomX <= val1):
         print("Outcome A")
     elif (randomX > val1) and (randomX <= val2):
         print("Outcome B")
     elif (randomX > val2) and (randomX <= val3):
         print("Outcome C")
     elif (randomX > val3) and (randomX <= val4):
         print("Outcome D")
     elif (randomX > val4) and (randomX <= val5):
         print("Outcome E")
     # Add the duration of the selected edge to the elapsed time
     duration = int(input("Enter duration: "))
     elapsed += duration
     print("Elapsed time: ", elapsed/60)
     # Repeat until we reach > 14 minutes

Compare Spectra

A neat little way of visually comparing two harmonic spectra.

spectra_83.53125-105.6

EDIT: As you may have noticed – the comparison is somewhat flawed due to my method of scaling. [what a fool]. Sit tight until I change this!

Unfortunately, I’ve had to depreciate the logarithmic scale used in the image below as it was causing some problems with the comparisons. The new version (pictured above) now works on a linear scale. :’(

spectra_122.03125-78.1

Move the mouse to alter the fundamentals of each spectra (X-axis is the ‘top’ spectrum).

Hit “S” to save the comparison as a .pdf file.

Processing files: compare_Spectra.zip