#include #include "SDL.h" #include "SDL_mixer.h" #include "SDL_image.h" #include #include #include #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); } // 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; } int main(int argc, char** argv) { 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); if (Init() == false) { return -1;} SDL_Event Event; bool done = false; while (!done) { bool gotEvent = SDL_PollEvent(&Event); while (!done && gotEvent) { switch (Event.type) { case SDL_KEYDOWN: switch (Event.key.keysym.sym) { case '1': Mix_PlayChannel(-1, _sample[0], 0); break; case '2': Mix_PlayChannel(-1, _sample[1], 0); break; case '3': Mix_PlayChannel(-1, _sample[2], 0); break; case '4': Mix_PlayChannel(-1, _sample[3], 0); break; case '5': Mix_PlayChannel(-1, _sample[4], 0); break; case '6': Mix_PlayChannel(-1, _sample[5], 0); break; default: break; } break; case SDL_QUIT: done = true; break; default: break; } if( !done ) { gotEvent = SDL_PollEvent(&Event); } } usleep(1000); } for( int i = 0; i < NUM_WAVEFORMS; i++ ) { Mix_FreeChunk(_sample[i]); } Mix_CloseAudio(); SDL_Quit(); return 0; }