diff --git a/C/banks/BANK1/1.wav b/C/banks/BANK1/1.wav new file mode 100644 index 0000000..dcb8553 Binary files /dev/null and b/C/banks/BANK1/1.wav differ diff --git a/C/banks/BANK1/2.wav b/C/banks/BANK1/2.wav new file mode 100644 index 0000000..72a4822 Binary files /dev/null and b/C/banks/BANK1/2.wav differ diff --git a/C/banks/BANK1/3.wav b/C/banks/BANK1/3.wav new file mode 100644 index 0000000..dcdf716 Binary files /dev/null and b/C/banks/BANK1/3.wav differ diff --git a/C/banks/BANK1/4.wav b/C/banks/BANK1/4.wav new file mode 100644 index 0000000..88f21f3 Binary files /dev/null and b/C/banks/BANK1/4.wav differ diff --git a/C/banks/BANK1/5.wav b/C/banks/BANK1/5.wav new file mode 100644 index 0000000..5ca2202 Binary files /dev/null and b/C/banks/BANK1/5.wav differ diff --git a/C/banks/BANK1/6.wav b/C/banks/BANK1/6.wav new file mode 100644 index 0000000..2a93d79 Binary files /dev/null and b/C/banks/BANK1/6.wav differ 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 new file mode 100644 index 0000000..561922d --- /dev/null +++ b/C/compile.sh @@ -0,0 +1 @@ +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 new file mode 100755 index 0000000..c08ba56 Binary files /dev/null and b/C/main differ diff --git a/C/main.cpp b/C/main.cpp new file mode 100644 index 0000000..d7fa2d6 --- /dev/null +++ b/C/main.cpp @@ -0,0 +1,104 @@ +#include +#include "SDL.h" +#include "SDL_mixer.h" +#include "SDL_image.h" +#include +#include +#include +#include + +#define NUM_WAVEFORMS 6 + +Mix_Chunk* _sample[NUM_WAVEFORMS]; + +#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); + + window = SDL_CreateWindow("Sonquencer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 400, 300, 0); + renderer = SDL_CreateRenderer(window, -1, 0); + + SDL_SetRenderDrawColor(renderer, 100, 100, 100, 255); + SDL_Delay(1000); + + if(loadBank(1) == false) {return -1;} + + SDL_Event event; + + while (!done) { + bool gotEvent = SDL_PollEvent(&event); + + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + + while (!done && gotEvent) { + switch (event.type) { + case SDL_KEYDOWN: + + switch (event.key.keysym.sym) { + case SDLK_ESCAPE: + Mix_CloseAudio(); + SDL_Quit(); + return 0; + break; + case SDLK_1: + playSample(1); + break; + case SDLK_2: + playSample(2); + break; + case SDLK_3: + playSample(3); + break; + case SDLK_4: + playSample(4); + break; + case SDLK_5: + playSample(5); + break; + case SDLK_6: + playSample(6); + break; + + default: + break; + } + break; + + case SDL_QUIT: + done = true; + break; + + default: + break; + } + + if( !done ) { gotEvent = SDL_PollEvent(&event); } + + } + + playStep(play, &timer, &step); + } + + + for( int i = 0; i < NUM_WAVEFORMS; i++ ) { + Mix_FreeChunk(_sample[i]); + } + + Mix_CloseAudio(); + 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