Memory Console (2021)
Made Using: Java · Processing IDE · Adobe Premiere Pro
Role: coder and video/video game curator

Memory Console was made as part of my MFA thesis show at the School of the Art Institute of Chicago. Click here to jump to the source code.

The feeling of suddenly recalling a precious memory, as if it were a flashback, a déjà vu, is one that I wanted to recreate with Memory Console. Growing up in the late 90s in a tech savvy family meant that gaming consoles and the PC were my main sources of entertainment, and ultimately the bulk of my childhood memories. Attached to each game, is a fragmented experience that I can recall bits and pieces of. Some are triggered by the images and others by the sounds. Mario’s cry in Yoshi’s Island transports me back to the basement in our house in Baltimore, Maryland, sitting on a pillow cross-legged on the carpeted floor, the bulky TV sits on a small drawer chest, and the Super Nintendo is covered in the smell of old perfume. Memory Console celebrates human memories, although broken, that technologies hold, in this case, that video games hold.

For viewers of this piece: I wonder which technology holds special memories for them?

Code in Memory Console’s Processing IDE sketch

//video set up
import processing.video.*;

Movie[] movies;

int currentMovieIndex = 0;

import processing.sound.*;

SoundFile[] soundfiles;

int currentSoundIndex = 0;

//pointillism ellipse
int size = 34;

void setup() {
fullScreen();
surface.setSize(1280,720);
//change cursor style  
  cursor(CROSS);

  movies = new Movie[] { 
    new Movie(this, "Megaman.mp4"),
    new Movie(this, "Yoshi.mp4"), 
    new Movie(this, "boogerman.mp4"), 
    new Movie(this, "EO.mp4"),
    new Movie(this, "GO.mp4"),
    new Movie(this, "LoZ.mp4"),
    new Movie(this, "LF2.mp4"),
    new Movie(this, "Medabots.mp4"),
    new Movie(this, "SurvivalProject.mp4"),
    new Movie(this, "ToyStory.mp4")
  };

  // Start the first movie.
  movies[currentMovieIndex].volume(0);
  movies[currentMovieIndex].play();
  movies[currentMovieIndex].volume(0);

soundfiles = new SoundFile[] {
  new SoundFile(this, "Megaman_audio.mp3"),
  new SoundFile(this, "Yoshi_audio.mp3"),
  new SoundFile(this, "boogerman_audio.mp3"),
  new SoundFile(this, "EO_audio.mp3"),
  new SoundFile(this, "GO_audio.mp3"),
  new SoundFile(this, "LoZ_audio.mp3"),
  new SoundFile(this, "LF2_audio.mp3"),
  new SoundFile(this, "Medabots_audio.mp3"),
  new SoundFile(this, "SurvivalProject_audio.mp3"),
  new SoundFile(this, "ToyStory_audio.mp3")
};

soundfiles[currentSoundIndex].play();


}

void movieEvent(Movie video) {
  video.read();
}

void draw() {
  print(currentMovieIndex);

  // Draw the full frame of the current movie.
  //image(movies[currentMovieIndex], 0, 0, width, height);

  background(255);


  //ellipse visuals
  fill (0);
  noStroke();
  float tiles = mouseX/4;
  float tileSize = width/tiles;
  
  //fixing the ellipse to fit the screen properly
  translate(tileSize/2, tileSize/2);


  //loop function for ellipses
  for (int x = 0; x < tiles; x++) {
    for (int y = 0; y < tiles; y++) {

      //size of ellipse based on color between black and white    

      color c = movies[currentMovieIndex].get(int(x*tileSize), int(y*tileSize));
      float size = map(brightness(c), 0, 255, tileSize, 0);

      ellipse(x*tileSize, y*tileSize, size, size);
    }
  }
  
  print(currentSoundIndex);

  float playbackSpeed = map(mouseX, 0, width, 0.25, 4.0);
  soundfiles[currentSoundIndex].rate(playbackSpeed);
  movies[currentMovieIndex].speed(playbackSpeed);
  float amplitude = map(mouseY, 0, width, 0.2, 1.0);
  soundfiles[currentSoundIndex].amp(amplitude);

}

//mouse click to generate next video
void mouseClicked() {

  // Whatever was playing is now paused.

soundfiles[currentSoundIndex].pause();
movies[currentMovieIndex].volume(0);
movies[currentMovieIndex].pause();
movies[currentMovieIndex].volume(0);
  currentMovieIndex = currentMovieIndex + 1;

  if (currentMovieIndex >= movies.length)
  {
    currentMovieIndex = 0;
  }
    currentSoundIndex = currentSoundIndex + 1;
  if (currentSoundIndex >= soundfiles.length)
  {
    currentSoundIndex = 0;
  }

  soundfiles[currentSoundIndex].play();
  movies[currentMovieIndex].volume(0);
  movies[currentMovieIndex].play();
  movies[currentMovieIndex].volume(0);
    soundfiles[currentSoundIndex].loop();
  movies[currentMovieIndex].loop();
}