2001-2003

DJ I, Robot Sound System

I first built a prototype of DJ I, Robot in 1998, when I noticed that technologists were trying to create all-digital DJ systems. This seemed counter-intuitive, as all the DJs I had met loved vinyl. Get yourself a lover who loves you like DJs love vinyl. Why replace it? Other projects in progress meant that it would be a year before I could build the first version of the robot.

In my understanding, DJing was (is) a fully realized art form. It was itself a tech hack that did not need further technologization, especially not at the expense of vinyl. DJing was a hack conducted by Jamaicans and their diaspora in the Bronx, a ghetto misuse of technology that has redirected global music history over the last forty years. The people who were building digital systems to eliminate vinyl were not from the same class, the same background, or the same race as the people who had invented the art form. Of course, neither was I.

For the three years of its existence, NWEAMO has drawn an international field of artists with a powerful concept: that the artificial boundaries between the academic world of avant-garde classical music and earthier electronica are dissolving… This year's edition drew artists from across the United States and from Japan, Korea, Germany and Canada. Some of these disparate tinkerers came from academia, others from the innovative edge of club culture. Others, like DJ I, Robot creator (and MIT faculty member) Chris Csikszentmihalyi, thrust boldly into both realms.
The Future of What? Zach Dundas, Willamette Week

I knew I couldn’t improve Djing. But I could do something far, far more stupid. I could keep the vinyl, but replace the DJs. This is, indeed, the logic of automation. You build the digital system first, then eventually the AI. Electric, computerized cars were a prerequiste to driverless cars. Even twenty years ago I recognized that the goal was not to improve DJ tools, but ultimately to replace the DJs themselves. I didn’t want to replace DJs, but if I did it first, ironically, I might serve as a bump in the road to manifest destiny.

 

////////////// DJ_I_ROBOT.DSW 2.4.01 /////////
#include “herc.h”
#include “baambaata.h”
#define ONES 0;
#define TWOS 1;
bool CController::MPlay(float rpm, double dest)
{
 //used to play events with no preroll
 long pos;
 pos = -(((int) (dest * m_Counts)) + m_pOffset);
 long vel = abs(rpm) * m_Counts * const1 * const2/60.0;
 return (fLoadTraj)(m_ID, LOAD_POS | LOAD_VEL | LOAD_ACC | ENABLE_SERVO | START_NOW ,
 pos, vel, (long)(0.015625*m_Counts), 0);
}
//To do: Jerms – Works on the 808, but still feels sluggish on the Baby Huey.
Void CDJ::OnCrossfade(byte Style_of)
{
 float w,b,m,x = 92.5;
 switch(Style_of) {
 case OAKENFIELD:
 *finger_ptr = TRUE;
 break;
 case GARAGE:
 TRN_WRK = TRUE;
 break;
 case FLASH:
 m_Flash = (m_Flash*1) + (m_Flash*2) + (m_Flash*3);
 break;
}
void CDJ::Spin(int table)
{
 CMidiPoint(table, MAX_VOL);
 MPlay((100/3.0), 4096);
 while(spin_ptr != COMPLETE)
 ;
 table = (table – 1) * -1;
 Spin(table);
}
void CDJ::BackSpin(int table)
{
 CMidiPoint(table, MIN_VOL);
 MPlay((100/3.0), -4096);
 while(spin_ptr != COMPLETE)
 ;
 table = (table – 1) * -1;
 BackSpin(table);
}
--------------------Configuration: DJiRobot - Win32 Debug
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
AddEventDialog.cpp
AddOptions.cpp
C:\Documents and Settings\All Users\Documents\currenter\AddOptions.cpp(90) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
Users\Documents\currenter\CreateMoveDialog.cpp(82) : warning C4244: Illegal call to CFunk.Jiggy(): Argument mismatch
C:\Documents and Settings\All Users\Documents\currenter\CreateMoveDialog.cpp(89) : warning C4244: '=' : conversion from ‘swingbeat’ to ‘ontheone’, possible loss of rhythm
DJiRobot.cpp
Underground.cpp
MethodManView.cpp
MoveSumpim.cpp
noScrubCtrl.cpp
Terminal8rX.cpp
Generating Code...
Linking...
DJiRobot.exe - 0 error(s), 3 warning(s)