Speech About Music

Generative cover design for the book by Malik Sharif. The illustrations take Seeger’s visualizations as a starting point. A Processing code then generates variations of the basic visual figure. The result reflects the different compositions and associated weightings of the components in Seeger’s model of the Relative Independence and Interdependence of the Media of Human Communication.

“Charles Seeger and Twenty-First-Century Musicologies The US-American musicologist, composer, philosopher, inventor, and political activist Charles Seeger (1886–1979) is a key figure in the development of twentieth-century musicology. This publication is the first book-length study of his philosophical theory of musicology – his meta-musicology –, which he continuously developed over the course of more than sixty years. The book comprises two main parts: The first part is a historical reconstruction and comparative analysis of Seeger’s meta-musicological theory. The second part employs Seeger’s theory as an arsenal of ideas in the discussion of twenty-first century meta- musicological issues, especially regarding the disciplinarity of musicology. Accordingly, this book is both an important contribution to the study of the history of musicology and a critical examination of the timeliness of Seeger’s ideas.”

Author / Publisher
Art Direction, Illustrations
Cinema 4D, Illustrator, Photoshop, InDesign
Brochure, 80 pages, Paper: Munken Polar, 4C+PANTONE 305 C, Font: Avenir, Print: Wograndl, Mattersburg/Austria.
					import processing.pdf.*;

float screenWidth = 800;
float screenHeight = 600;
float centerX = screenWidth/2;
float centerY = screenHeight/2;
float triSize = 30;
float ellipseSize = 50;

int stepX = 120;
int stepY = 120;

void setup(){
   size(1000, 800); 
   //beginRecord(PDF, "filename.pdf"); 

   for(int i = 1; i <= 6; i++){
     for(int k = 1; k <= 5; k++){
       int currX = i * stepX;
       int currY = k * stepY;
       float triSize = random(20, 40);
       float ellipseSize = random(30, 100-triSize);
       float randomRotate = 0;//random(-0.5, 0.5);//random(TWO_PI);
       float randomPos = 10;
       make(currX, currY, triSize, ellipseSize, randomRotate, randomPos);

void draw(){

void make(float _x, float _y, float _triSize, float _ellipseSize, float _randomRotate, float _randomPos){
  float triX1 = -(_triSize/2)+random(-_randomPos, _randomPos);
  float triY1 = -(_triSize/3)+random(-_randomPos, _randomPos);
  float triX2 = +(_triSize/2)+random(-_randomPos, _randomPos);
  float triY2 = -(_triSize/3)+random(-_randomPos, _randomPos);
  float triX3 = 0+random(-_randomPos, _randomPos);
  float triY3 = +(_triSize*1.5/3)+random(-_randomPos, _randomPos);
  translate(_x, _y);
   ellipse(triX1, triY1, _ellipseSize, _ellipseSize);
   ellipse(triX2, triY2, _ellipseSize, _ellipseSize);
   ellipse(triX3, triY3, _ellipseSize, _ellipseSize);
   PVector E1P1 = new PVector();
   PVector E1P2 = new PVector();
   PVector E2P1 = new PVector();
   PVector E2P2 = new PVector();
   PVector E3P1 = new PVector();
   PVector E3P2 = new PVector();
   E1P1.x = triX1 + (_ellipseSize/2 * cos(radians(25)));
   E1P1.y = triY1 + (_ellipseSize/2 * sin(radians(25)));
   E1P2.x = triX1 + (_ellipseSize/2 * cos(radians(25+180)));
   E1P2.y = triY1 + (_ellipseSize/2 * sin(radians(25+180)));
   E2P1.x = triX2 + (_ellipseSize/2 * cos(radians(25+130)));
   E2P1.y = triY2 + (_ellipseSize/2 * sin(radians(25+130)));
   E2P2.x = triX2 + (_ellipseSize/2 * cos(radians(25+180+130)));
   E2P2.y = triY2 + (_ellipseSize/2 * sin(radians(25+180+130)));
   E3P1.x = triX3 + (_ellipseSize/2 * cos(radians(25+245)));
   E3P1.y = triY3 + (_ellipseSize/2 * sin(radians(25+245)));
   E3P2.x = triX3 + (_ellipseSize/2 * cos(radians(25+180+245)));
   E3P2.y = triY3 + (_ellipseSize/2 * sin(radians(25+180+245)));
   line(E1P1.x, E1P1.y, E1P2.x, E1P2.y);
   line(E2P1.x, E2P1.y, E2P2.x, E2P2.y);
   line(E3P1.x, E3P1.y, E3P2.x, E3P2.y);
   ellipse(E1P1.x, E1P1.y, 4, 4);
   ellipse(E1P2.x, E1P2.y, 4, 4);
   ellipse(E2P1.x, E2P1.y, 4, 4);
   ellipse(E2P2.x, E2P2.y, 4, 4);
   ellipse(E3P1.x, E3P1.y, 4, 4);
   ellipse(E3P2.x, E3P2.y, 4, 4);