Browse Source

load and play samples

develop
Carmine De Rosa 5 years ago
parent
commit
b51552de5d
  1. 0
      C/banks/BANK1/1.wav
  2. 0
      C/banks/BANK1/2.wav
  3. 0
      C/banks/BANK1/3.wav
  4. 0
      C/banks/BANK1/4.wav
  5. 0
      C/banks/BANK1/5.wav
  6. 0
      C/banks/BANK1/6.wav
  7. BIN
      C/banks/BANK2/1.wav
  8. BIN
      C/banks/BANK2/2.wav
  9. BIN
      C/banks/BANK2/3.wav
  10. BIN
      C/banks/BANK2/4.wav
  11. BIN
      C/banks/BANK2/5.wav
  12. BIN
      C/banks/BANK3/1.wav
  13. BIN
      C/banks/BANK3/2.wav
  14. BIN
      C/banks/BANK3/3.wav
  15. BIN
      C/banks/BANK3/4.wav
  16. BIN
      C/banks/BANK3/5.wav
  17. BIN
      C/banks/BANK4/1.wav
  18. BIN
      C/banks/BANK4/2.wav
  19. BIN
      C/banks/BANK4/3.wav
  20. BIN
      C/banks/BANK4/4.wav
  21. BIN
      C/banks/BANK4/5.wav
  22. 2
      C/compile.sh
  23. 30
      C/loaders.cpp
  24. BIN
      C/main
  25. 112
      C/main.cpp
  26. 15
      C/players.cpp
  27. BIN
      C/sonquencer

0
C/BANK1/1.wav → C/banks/BANK1/1.wav

0
C/BANK1/2.wav → C/banks/BANK1/2.wav

0
C/BANK1/3.wav → C/banks/BANK1/3.wav

0
C/BANK1/4.wav → C/banks/BANK1/4.wav

0
C/BANK1/5.wav → C/banks/BANK1/5.wav

0
C/BANK1/6.wav → C/banks/BANK1/6.wav

BIN
C/banks/BANK2/1.wav

Binary file not shown.

BIN
C/banks/BANK2/2.wav

Binary file not shown.

BIN
C/banks/BANK2/3.wav

Binary file not shown.

BIN
C/banks/BANK2/4.wav

Binary file not shown.

BIN
C/banks/BANK2/5.wav

Binary file not shown.

BIN
C/banks/BANK3/1.wav

Binary file not shown.

BIN
C/banks/BANK3/2.wav

Binary file not shown.

BIN
C/banks/BANK3/3.wav

Binary file not shown.

BIN
C/banks/BANK3/4.wav

Binary file not shown.

BIN
C/banks/BANK3/5.wav

Binary file not shown.

BIN
C/banks/BANK4/1.wav

Binary file not shown.

BIN
C/banks/BANK4/2.wav

Binary file not shown.

BIN
C/banks/BANK4/3.wav

Binary file not shown.

BIN
C/banks/BANK4/4.wav

Binary file not shown.

BIN
C/banks/BANK4/5.wav

Binary file not shown.

2
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

30
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;
}

BIN
C/main

Binary file not shown.

112
C/main.cpp

@ -1,5 +1,4 @@
#include <stdio.h> #include <stdio.h>
#include "SDL.h" #include "SDL.h"
#include "SDL_mixer.h" #include "SDL_mixer.h"
#include "SDL_image.h" #include "SDL_image.h"
@ -9,88 +8,70 @@
#include <math.h> #include <math.h>
#define NUM_WAVEFORMS 6 #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]);
}
}
Mix_Chunk* _sample[NUM_WAVEFORMS];
return true;
}
#include "players.cpp"
#include "loaders.cpp"
int main(int argc, char** argv) { 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 ); SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO );
atexit(SDL_Quit); 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) { while (!done) {
bool gotEvent = SDL_PollEvent(&Event);
bool gotEvent = SDL_PollEvent(&event);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
while (!done && gotEvent) { while (!done && gotEvent) {
switch (Event.type) {
switch (event.type) {
case SDL_KEYDOWN: 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; break;
case '2':
Mix_PlayChannel(-1, _sample[1], 0);
case SDLK_2:
playSample(2);
break; break;
case '3':
Mix_PlayChannel(-1, _sample[2], 0);
case SDLK_3:
playSample(3);
break; break;
case '4':
Mix_PlayChannel(-1, _sample[3], 0);
case SDLK_4:
playSample(4);
break; break;
case '5':
Mix_PlayChannel(-1, _sample[4], 0);
case SDLK_5:
playSample(5);
break; break;
case '6':
Mix_PlayChannel(-1, _sample[5], 0);
case SDLK_6:
playSample(6);
break; break;
default: default:
break; break;
} }
@ -103,13 +84,15 @@ int main(int argc, char** argv) {
default: default:
break; 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++ ) { for( int i = 0; i < NUM_WAVEFORMS; i++ ) {
Mix_FreeChunk(_sample[i]); Mix_FreeChunk(_sample[i]);
} }
@ -118,3 +101,4 @@ int main(int argc, char** argv) {
SDL_Quit(); SDL_Quit();
return 0; return 0;
} }

15
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);
}

BIN
C/sonquencer

Binary file not shown.
Loading…
Cancel
Save