You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.8 KiB
121 lines
2.8 KiB
5 years ago
|
#include <stdio.h>
|
||
|
|
||
|
#include "SDL.h"
|
||
|
#include "SDL_mixer.h"
|
||
|
#include "SDL_image.h"
|
||
|
#include <unistd.h>
|
||
|
#include <syslog.h>
|
||
|
#include <string.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
#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;
|
||
|
}
|