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(); }