diff --git a/C/BANK1/1.wav b/C/banks/BANK1/1.wav similarity index 100% rename from C/BANK1/1.wav rename to C/banks/BANK1/1.wav diff --git a/C/BANK1/2.wav b/C/banks/BANK1/2.wav similarity index 100% rename from C/BANK1/2.wav rename to C/banks/BANK1/2.wav diff --git a/C/BANK1/3.wav b/C/banks/BANK1/3.wav similarity index 100% rename from C/BANK1/3.wav rename to C/banks/BANK1/3.wav diff --git a/C/BANK1/4.wav b/C/banks/BANK1/4.wav similarity index 100% rename from C/BANK1/4.wav rename to C/banks/BANK1/4.wav diff --git a/C/BANK1/5.wav b/C/banks/BANK1/5.wav similarity index 100% rename from C/BANK1/5.wav rename to C/banks/BANK1/5.wav diff --git a/C/BANK1/6.wav b/C/banks/BANK1/6.wav similarity index 100% rename from C/BANK1/6.wav rename to C/banks/BANK1/6.wav diff --git a/C/banks/BANK2/1.wav b/C/banks/BANK2/1.wav new file mode 100644 index 0000000..35c8175 Binary files /dev/null and b/C/banks/BANK2/1.wav differ diff --git a/C/banks/BANK2/2.wav b/C/banks/BANK2/2.wav new file mode 100644 index 0000000..32bd834 Binary files /dev/null and b/C/banks/BANK2/2.wav differ diff --git a/C/banks/BANK2/3.wav b/C/banks/BANK2/3.wav new file mode 100644 index 0000000..101c110 Binary files /dev/null and b/C/banks/BANK2/3.wav differ diff --git a/C/banks/BANK2/4.wav b/C/banks/BANK2/4.wav new file mode 100644 index 0000000..f997096 Binary files /dev/null and b/C/banks/BANK2/4.wav differ diff --git a/C/banks/BANK2/5.wav b/C/banks/BANK2/5.wav new file mode 100644 index 0000000..6641aed Binary files /dev/null and b/C/banks/BANK2/5.wav differ diff --git a/C/banks/BANK3/1.wav b/C/banks/BANK3/1.wav new file mode 100644 index 0000000..35c8175 Binary files /dev/null and b/C/banks/BANK3/1.wav differ diff --git a/C/banks/BANK3/2.wav b/C/banks/BANK3/2.wav new file mode 100644 index 0000000..32bd834 Binary files /dev/null and b/C/banks/BANK3/2.wav differ diff --git a/C/banks/BANK3/3.wav b/C/banks/BANK3/3.wav new file mode 100644 index 0000000..101c110 Binary files /dev/null and b/C/banks/BANK3/3.wav differ diff --git a/C/banks/BANK3/4.wav b/C/banks/BANK3/4.wav new file mode 100644 index 0000000..f997096 Binary files /dev/null and b/C/banks/BANK3/4.wav differ diff --git a/C/banks/BANK3/5.wav b/C/banks/BANK3/5.wav new file mode 100644 index 0000000..6641aed Binary files /dev/null and b/C/banks/BANK3/5.wav differ diff --git a/C/banks/BANK4/1.wav b/C/banks/BANK4/1.wav new file mode 100644 index 0000000..35c8175 Binary files /dev/null and b/C/banks/BANK4/1.wav differ diff --git a/C/banks/BANK4/2.wav b/C/banks/BANK4/2.wav new file mode 100644 index 0000000..32bd834 Binary files /dev/null and b/C/banks/BANK4/2.wav differ diff --git a/C/banks/BANK4/3.wav b/C/banks/BANK4/3.wav new file mode 100644 index 0000000..101c110 Binary files /dev/null and b/C/banks/BANK4/3.wav differ diff --git a/C/banks/BANK4/4.wav b/C/banks/BANK4/4.wav new file mode 100644 index 0000000..f997096 Binary files /dev/null and b/C/banks/BANK4/4.wav differ diff --git a/C/banks/BANK4/5.wav b/C/banks/BANK4/5.wav new file mode 100644 index 0000000..6641aed Binary files /dev/null and b/C/banks/BANK4/5.wav differ diff --git a/C/compile.sh b/C/compile.sh index c9815d1..561922d 100644 --- a/C/compile.sh +++ b/C/compile.sh @@ -1 +1 @@ -g++ -o main -I/usr/include/SDL2 main.cpp -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer +g++ -o sonquencer -I/usr/include/SDL2 main.cpp -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer diff --git a/C/loaders.cpp b/C/loaders.cpp new file mode 100644 index 0000000..7350a19 --- /dev/null +++ b/C/loaders.cpp @@ -0,0 +1,30 @@ + +int loadBank(int bank) { + + memset(_sample, 0, sizeof(Mix_Chunk*) * NUM_WAVEFORMS); + + int result = Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 512); + if( result < 0 ) { + fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); + exit(-1); + } + + result = Mix_AllocateChannels(4); + if( result < 0 ) { + fprintf(stderr, "Unable to allocate mixing channels: %s\n", SDL_GetError()); + exit(-1); + } + + char waveFileName[17]; + + for( int i = 0; i < NUM_WAVEFORMS; i++ ) { + sprintf(waveFileName, "banks/BANK%d/%d.wav", bank, i+1); + + _sample[i] = Mix_LoadWAV(waveFileName); + if( _sample[i] == NULL ) { + fprintf(stderr, "Unable to load wave file: %s\n", waveFileName); + } + } + + return true; +} diff --git a/C/main b/C/main index 48cb35d..c08ba56 100755 Binary files a/C/main and b/C/main differ diff --git a/C/main.cpp b/C/main.cpp index 7621c27..d7fa2d6 100644 --- a/C/main.cpp +++ b/C/main.cpp @@ -1,5 +1,4 @@ #include - #include "SDL.h" #include "SDL_mixer.h" #include "SDL_image.h" @@ -9,107 +8,91 @@ #include #define NUM_WAVEFORMS 6 -const char* _waveFileNames[] = { - "BANK1/1.wav", - "BANK1/2.wav", - "BANK1/3.wav", - "BANK1/4.wav", - "BANK1/5.wav", - "BANK1/6.wav", -}; - -Mix_Chunk* _sample[6]; - -int Init(void) { - - memset(_sample, 0, sizeof(Mix_Chunk*) * 6); - - // Set up the audio stream - int result = Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 512); - if( result < 0 ) { - fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); - exit(-1); - } - result = Mix_AllocateChannels(4); - if( result < 0 ) { - fprintf(stderr, "Unable to allocate mixing channels: %s\n", SDL_GetError()); - exit(-1); - } +Mix_Chunk* _sample[NUM_WAVEFORMS]; - // Load waveforms - for( int i = 0; i < NUM_WAVEFORMS; i++ ) { - _sample[i] = Mix_LoadWAV(_waveFileNames[i]); - if( _sample[i] == NULL ) { - fprintf(stderr, "Unable to load wave file: %s\n", _waveFileNames[i]); - } - } - - return true; -} +#include "players.cpp" +#include "loaders.cpp" int main(int argc, char** argv) { + bool done = false; + bool play = true; + int timer = 0; + int step = 500; + + SDL_Window* window; + SDL_Renderer* renderer; + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO ); atexit(SDL_Quit); - SDL_Window* window = SDL_CreateWindow("Sonquencer", - SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, - 800, - 600, - SDL_WINDOW_RESIZABLE); + window = SDL_CreateWindow("Sonquencer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 400, 300, 0); + renderer = SDL_CreateRenderer(window, -1, 0); - if (Init() == false) { return -1;} + SDL_SetRenderDrawColor(renderer, 100, 100, 100, 255); + SDL_Delay(1000); - SDL_Event Event; + if(loadBank(1) == false) {return -1;} + + SDL_Event event; - bool done = false; while (!done) { - bool gotEvent = SDL_PollEvent(&Event); + bool gotEvent = SDL_PollEvent(&event); + + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); while (!done && gotEvent) { - switch (Event.type) { + switch (event.type) { case SDL_KEYDOWN: - switch (Event.key.keysym.sym) { - case '1': - Mix_PlayChannel(-1, _sample[0], 0); + switch (event.key.keysym.sym) { + case SDLK_ESCAPE: + Mix_CloseAudio(); + SDL_Quit(); + return 0; + break; + case SDLK_1: + playSample(1); break; - case '2': - Mix_PlayChannel(-1, _sample[1], 0); + case SDLK_2: + playSample(2); break; - case '3': - Mix_PlayChannel(-1, _sample[2], 0); + case SDLK_3: + playSample(3); break; - case '4': - Mix_PlayChannel(-1, _sample[3], 0); + case SDLK_4: + playSample(4); break; - case '5': - Mix_PlayChannel(-1, _sample[4], 0); + case SDLK_5: + playSample(5); break; - case '6': - Mix_PlayChannel(-1, _sample[5], 0); + case SDLK_6: + playSample(6); break; + default: break; } break; - case SDL_QUIT: - done = true; - break; + case SDL_QUIT: + done = true; + break; - default: - break; + default: + break; } - if( !done ) { gotEvent = SDL_PollEvent(&Event); } - } - usleep(1000); + if( !done ) { gotEvent = SDL_PollEvent(&event); } + + } + playStep(play, &timer, &step); } + for( int i = 0; i < NUM_WAVEFORMS; i++ ) { Mix_FreeChunk(_sample[i]); } @@ -118,3 +101,4 @@ int main(int argc, char** argv) { SDL_Quit(); return 0; } + diff --git a/C/players.cpp b/C/players.cpp new file mode 100644 index 0000000..633a6f1 --- /dev/null +++ b/C/players.cpp @@ -0,0 +1,15 @@ + +void playStep(bool play, int *timer, int *step) { + *timer = *timer >= *step ? 0 : *timer+1; + usleep(1000); + + if(*timer == 0) { + printf("%d\n", *timer); + + Mix_PlayChannel(-1, _sample[1], 0); + } +} + +void playSample(int sample) { + Mix_PlayChannel(-1, _sample[sample-1], 0); +} diff --git a/C/sonquencer b/C/sonquencer new file mode 100755 index 0000000..baf7a3d Binary files /dev/null and b/C/sonquencer differ