Last active
June 15, 2017 18:16
-
-
Save ander94lakx/e8724a5f23cc9b137dc475486fb7866d to your computer and use it in GitHub Desktop.
Pianoa grabatzen/erreproduzitzen
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* funtzioak.c | |
* | |
* Created on: 30 may. 2017 | |
* Author: alex | |
*/ | |
#include <string.h> | |
#include <time.h> | |
#include <unistd.h> | |
#include <SDL2/SDL.h> | |
#include <SDL2/SDL_mixer.h> | |
#include "funtzioak.h" | |
void piztu() | |
{ | |
// Instrumento guztien soinu guztiak kargatzen degu dagokion egituraren eta dagokion adagarri bakoitzean | |
piano.mota = PIANOA; | |
piano.notak.DO = Mix_LoadWAV("soinuak/pianoa/DO.wav"); | |
piano.notak.DO_S = Mix_LoadWAV("soinuak/pianoa/DO_S.wav"); | |
piano.notak.RE = Mix_LoadWAV("soinuak/pianoa/RE.wav"); | |
piano.notak.RE_S = Mix_LoadWAV("soinuak/pianoa/RE_S.wav"); | |
piano.notak.MI = Mix_LoadWAV("soinuak/pianoa/MI.wav"); | |
piano.notak.FA = Mix_LoadWAV("soinuak/pianoa/FA.wav"); | |
piano.notak.FA_S = Mix_LoadWAV("soinuak/pianoa/FA_S.wav"); | |
piano.notak.SOL = Mix_LoadWAV("soinuak/pianoa/SOL.wav"); | |
piano.notak.SOL_S = Mix_LoadWAV("soinuak/pianoa/SOL_S.wav"); | |
piano.notak.LA = Mix_LoadWAV("soinuak/pianoa/LA.wav"); | |
piano.notak.LA_S = Mix_LoadWAV("soinuak/pianoa/LA_S.wav"); | |
piano.notak.SI = Mix_LoadWAV("soinuak/pianoa/SI.wav"); | |
bibolina.mota = BIBOLINA; | |
//bibolina.notak.DO = Mix_LoadWAV("soinuak/bibolina/DO.wav"); | |
//... | |
gitarra.mota = GITARRA; | |
//gitarra.notak.DO = Mix_LoadWAV("soinuak/gitarra/DO.wav"); | |
//... | |
flauta.mota = FLAUTA; | |
//flauta.notak.DO = Mix_LoadWAV("soinuak/flauta/DO.wav"); | |
//... | |
} | |
void grabatu() | |
{ | |
// Instrumentua aukeratzen dugu | |
INSTRUMENTUA jotzen; | |
char* mota_str; | |
switch (jotzen_mota) | |
{ | |
case PIANOA: | |
jotzen = piano; | |
mota_str = "PIANOA"; | |
break; | |
case GITARRA: | |
jotzen = gitarra; | |
mota_str = "GITARRA"; | |
break; | |
case BIBOLINA: | |
jotzen = bibolina; | |
mota_str = "BIBOLINA"; | |
break; | |
case FLAUTA: | |
jotzen = flauta; | |
mota_str = "FLAUTA"; | |
break; | |
} | |
if (!fitxGrabatu) // Grabatzeko abestia oraindik irekita ez badago orduan grabatzen hasten ari gara | |
{ | |
// Izena sortzeko behar degun adagarriak sortzen ditugu | |
int zenbakia = 0; | |
char* abestiaren_izena = (char*) malloc(sizeof(char) * 14); // Beti 14 karaktereko izena izango du | |
// Orain zer zenbaki erabili behar dugu txertatzen dugu | |
while (zenbakia < 1000) | |
{ | |
// Dena lotzen dugu fitzategiaren izena sortzeko | |
sprintf(abestiaren_izena, "%s%03d%s", "abestia", zenbakia, ".txt"); | |
// Hau egiteko (fitxategia ireki saiatu ordez access() erablitzeko) <unistd.h> gehitu behar degu | |
if (access(abestiaren_izena, F_OK) == -1) // Ea existitzen EZ den konprobatzen degu | |
{ | |
// Existizen ez bada daukagu abestia gordeko dugun fitzategiaren izena berria | |
break; | |
} | |
zenbakia++; | |
} | |
if (zenbakia >= 1000) | |
{ | |
printf("Znebaki guztiak agortuta daude\n"); | |
} | |
fitxGrabatu = fopen(abestiaren_izena, "w"); | |
} | |
if (fitxGrabatu != NULL) | |
{ | |
SDL_Event event; // Gerta ditzaketen ebentuak gordeko dugun aldagarri bat definitzen degu | |
double hasiera_s = 0; // Aldagarri hau denbora neurritzeko erabiliko dugun bi aldagarrienetariko bat da | |
int running = 1; | |
while (oraingo_egoera == GRABATU && running) // BUCLE AMAIEZINA: Gure aplikazioa behin eta berriro egongo da ebentuak "entzuten" | |
{ | |
// Ebentua prozezatzen dugo (ebetuak gauza asko izan dezakete, adibides teklatuko tekla bat jo | |
while (SDL_PollEvent(&event)) | |
{ | |
if (event.type == SDL_QUIT) | |
{ | |
exit(0); // Hau programa GUZTIA hixten du | |
} | |
else if (event.type == SDL_KEYDOWN) | |
{ | |
// Tekla pultsatu arte zenbat denbora pasa den kalkulatuko dugu | |
// clock() funtzioa programa hasi denetik zenbat "erloju ziklo" pasatu diren itzultzen digu | |
// "erloju ziklo" horiek segundutara pasatzeko CLOCKS_PER_SEC -rekin zatitu behar dugu ziklo horiei | |
double bukaera_s = (double) clock() / CLOCKS_PER_SEC; | |
// Denbora kalkulatzea erraza da: bukaera - haisera eta emaitza hori bider 1000 milisegundutara pasatzeko | |
int denbora_itxaroten_ms = (int) ((bukaera_s - hasiera_s) | |
* 1000); | |
denbora_itxaroten_ms -= denboraPausatuta; // Pausatuta engon den denbora kentzen dugu | |
denboraPausatuta = 0; | |
// Denbora hor kalkulatu ondoren (delay) gure abestiaren fitxategian gordeko dugu | |
fprintf(fitxGrabatu, "DELAY %d\n", denbora_itxaroten_ms); | |
// Hasiera denbora eskuratzen dugu momentu honetik pasa den | |
// denbora kalkulatzeko berriro beste tekla bat pultsatzean | |
hasiera_s = (double) clock() / CLOCKS_PER_SEC; | |
if (event.key.keysym.sym == SDLK_ESCAPE) | |
{ | |
running = 0; | |
fclose(fitxGrabatu); | |
break; | |
} | |
else if (event.key.keysym.sym == SDLK_0) // Pusatzeko tekla pultzatzen badugu pausatzen dugu | |
{ | |
oraingo_egoera = PAUSATU; | |
aurreko_egoera = GRABATU; | |
break; // ADI! Break azkenean joan behar da egoreak alda dezaten | |
} | |
else if (event.key.keysym.sym == SDLK_9) // Paratzeko tekla pultzatzen badugu pausatzen dugu | |
{ | |
oraingo_egoera = PARATU; | |
aurreko_egoera = GRABATU; | |
break; // ADI! Break azkenean joan behar da egoreak alda dezaten | |
} | |
else if (event.key.keysym.sym == SDLK_a) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO, 0); | |
fprintf(fitxGrabatu, "%s DO\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_w) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO_S, 0); | |
fprintf(fitxGrabatu, "%s DO_S\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_s) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE, 0); | |
fprintf(fitxGrabatu, "%s RE\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_e) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE_S, 0); | |
fprintf(fitxGrabatu, "%s RE_S\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_d) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.MI, 0); | |
fprintf(fitxGrabatu, "%s MI\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_f) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA, 0); | |
fprintf(fitxGrabatu, "%s FA\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_t) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA_S, 0); | |
fprintf(fitxGrabatu, "%s FA_S\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_g) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL, 0); | |
fprintf(fitxGrabatu, "%s SOL\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_y) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL_S, 0); | |
fprintf(fitxGrabatu, "%s SOL_S\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_h) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA, 0); | |
fprintf(fitxGrabatu, "%s LA\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_u) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA_S, 0); | |
fprintf(fitxGrabatu, "%s LA_S\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_j) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SI, 0); | |
fprintf(fitxGrabatu, "%s SI\n", mota_str); | |
} | |
else if (event.key.keysym.sym == SDLK_1) | |
{ | |
jotzen = piano; | |
jotzen_mota = PIANOA; | |
mota_str = "PIANOA"; | |
} | |
else if (event.key.keysym.sym == SDLK_2) | |
{ | |
jotzen = bibolina; | |
jotzen_mota = BIBOLINA; | |
mota_str = "BIBOLINA"; | |
} | |
else if (event.key.keysym.sym == SDLK_3) | |
{ | |
jotzen = flauta; | |
jotzen_mota = FLAUTA; | |
mota_str = "FLAUTA"; | |
} | |
else if (event.key.keysym.sym == SDLK_4) | |
{ | |
jotzen = gitarra; | |
jotzen_mota = GITARRA; | |
mota_str = "GITARRA"; | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
printf("ERROREA\n"); | |
} | |
} | |
void pausatu() | |
{ | |
// Pausatuta egon den denbora kalkulatzeko aldagarri batzuk | |
double Hasiera = 0; | |
double Bukaera = 0; | |
Hasiera = (double) clock() / CLOCKS_PER_SEC; | |
SDL_Event event; | |
while (oraingo_egoera == PAUSATU) | |
{ | |
while (SDL_PollEvent(&event)) | |
{ | |
if (event.type == SDL_KEYDOWN) | |
{ | |
if (event.key.keysym.sym == SDLK_0) | |
{ | |
oraingo_egoera = aurreko_egoera; | |
break; // Barruko blukletik ateratzeko (kanpokotik automatikoki aterako da egorea aldatu dugulako) | |
} | |
} | |
} | |
} | |
// Egoera aladatzean pasa den denbora kalkulatzen dugu | |
Bukaera = (double) clock() / CLOCKS_PER_SEC; | |
denboraPausatuta = (int) ((Bukaera - Hasiera) * 1000); | |
} | |
void paratu() | |
{ | |
SDL_Event event; | |
while (oraingo_egoera == PARATU) | |
{ | |
while (SDL_PollEvent(&event)) | |
{ | |
if (event.type == SDL_KEYDOWN) | |
{ | |
if (event.key.keysym.sym == SDLK_p) | |
{ | |
oraingo_egoera = aurreko_egoera; | |
if (oraingo_egoera == GRABATU) | |
{ | |
if (fitxGrabatu) // Ea fitxategi bat dagoen konprobatzen degu | |
{ | |
fclose(fitxGrabatu); // Ixten dugu fitxategua paratu dugulako | |
} | |
} | |
else if (oraingo_egoera == ERREPRODUZITU) | |
{ | |
if (fitxErreproduzitu) // Ea fitxategi bat dagoen konprobatzen degu | |
{ | |
fclose(fitxErreproduzitu); // Ixten dugu fitxategua paratu dugulako | |
} | |
} | |
break; | |
} | |
} | |
} | |
} | |
} | |
void erreproduzitu() | |
{ | |
if (!fitxErreproduzitu) // Erreproduzitzeko abestia oraindik irekita ez badago orduan erreproduzitzen hasten gara | |
{ | |
do | |
{ | |
int zenbakia; | |
char str[128]; | |
char* abestiaren_izena = (char*) malloc(sizeof(char) * 14); // Beti 14 karaktereko izena izango du | |
// Ireki nahi dugun abestiaren zenbakia eskatzen dugu | |
printf("Sartu erreproduzitu nahi dezun abestiaren ZENBAKIA\n"); | |
fgets(str, 128, stdin); | |
sscanf(str, "%d", &zenbakia); | |
// Dena lotzen dugu fitzategiaren izena sortzeko | |
sprintf(abestiaren_izena, "%s%03d%s", "abestia", zenbakia, ".txt"); | |
fitxErreproduzitu = fopen(abestiaren_izena, "r"); | |
// Hau egiteko (fitxategia ireki saiatu ordez access() erablitzeko) <unistd.h> gehitu behar degu | |
if (fitxErreproduzitu) | |
{ | |
break; // Irekita daukagu | |
} | |
else // Ezin izan dugu fitxateguia ireki, orduan berriro prozesua errepikatzen degu (horregatik do-while erablitzen dugu) | |
{ | |
printf("Abesti hori ez da existitzen\n"); | |
} | |
} while (!fitxErreproduzitu); // fitx == NULL | |
} | |
if (fitxErreproduzitu != NULL) { | |
char* instr_mota_str = (char*) malloc(sizeof(char) * 15); | |
SDL_Event event; | |
// Erreproduzitzean baita ere ebentuak entzuten ditugu pausatzeko tekla pultzasioak entzuteko gai ahal izateko | |
while (oraingo_egoera == ERREPRODUZITU) | |
{ | |
while (SDL_PollEvent(&event)) | |
{ | |
// Fitxategitik irakutzen dugu eta bukaerara hetzen badugu fitxateguia ixten dugu ta buklea apurtzen dugu | |
if (EOF == fscanf(fitxErreproduzitu, "%s", instr_mota_str)) | |
{ | |
fclose(fitxErreproduzitu); | |
break; // ADI! Break azkenean joan behar da! | |
} | |
if (event.type == SDL_QUIT) | |
{ | |
exit(0); // Hau programa GUZTIA hixten du | |
} | |
else if (event.type == SDL_KEYDOWN) | |
{ | |
if (event.key.keysym.sym == SDLK_0) // Pusatzeko tekla pultzatzen badugu pausatzen dugu | |
{ | |
oraingo_egoera = PAUSATU; | |
aurreko_egoera = ERREPRODUZITU; | |
break; // ADI! Break azkenean joan behar da egoreak alda dezaten | |
} | |
if (event.key.keysym.sym == SDLK_9) // Paratzeko tekla pultzatzen badugu pausatzen dugu | |
{ | |
oraingo_egoera = PARATU; | |
aurreko_egoera = ERREPRODUZITU; | |
break; // ADI! Break azkenean joan behar da egoreak alda dezaten | |
} | |
} | |
// Instrumentua berreskuratzen degu | |
INSTRUMENTUA jotzen; | |
if (0 == strcmp(instr_mota_str, "PIANOA")) | |
{ | |
jotzen = piano; | |
} | |
else if (0 == strcmp(instr_mota_str, "BIBOLINA")) | |
{ | |
jotzen = bibolina; | |
} | |
else if (0 == strcmp(instr_mota_str, "GITARRA")) | |
{ | |
jotzen = gitarra; | |
} | |
else if (0 == strcmp(instr_mota_str, "FLAUTA")) | |
{ | |
jotzen = flauta; | |
} | |
if (0 == strcmp(instr_mota_str, "DELAY")) | |
{ | |
int delay_denbora; | |
fscanf(fitxErreproduzitu, "%d", &delay_denbora); | |
SDL_Delay(delay_denbora); | |
} | |
else | |
{ | |
// Nota berreskuratzen eta erreproduzitzen degu | |
char* nota_str = (char*) malloc(sizeof(char) * 15); | |
fscanf(fitxErreproduzitu, "%s", nota_str); | |
if (0 == strcmp(nota_str, "DO")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO, 0); | |
} | |
else if (0 == strcmp(nota_str, "DO_S")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO_S, 0); | |
} | |
else if (0 == strcmp(nota_str, "RE")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE, 0); | |
} | |
else if (0 == strcmp(nota_str, "RE_S")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE_S, 0); | |
} | |
else if (0 == strcmp(nota_str, "MI")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.MI, 0); | |
} | |
else if (0 == strcmp(nota_str, "FA")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA, 0); | |
} | |
else if (0 == strcmp(nota_str, "FA_S")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA_S, 0); | |
} | |
else if (0 == strcmp(nota_str, "SOL")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL, 0); | |
} | |
else if (0 == strcmp(nota_str, "SOL_S")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL_S, 0); | |
} | |
else if (0 == strcmp(nota_str, "LA")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA, 0); | |
} | |
else if (0 == strcmp(nota_str, "LA_S")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA_S, 0); | |
} | |
else if (0 == strcmp(nota_str, "SI")) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SI, 0); | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
printf("ERROREA"); | |
} | |
} | |
void jo() | |
{ | |
// Instrumentua aukeratzen dugu | |
INSTRUMENTUA jotzen; | |
switch (jotzen_mota) | |
{ | |
case PIANOA: | |
jotzen = piano; | |
break; | |
case GITARRA: | |
jotzen = gitarra; | |
break; | |
case BIBOLINA: | |
jotzen = bibolina; | |
break; | |
case FLAUTA: | |
jotzen = flauta; | |
break; | |
} | |
SDL_Event event; // Gerta ditzaketen ebentuak godeko dugun aldagarri bat definitzen degu | |
int running = 1; | |
while (oraingo_egoera == JO && running) // BUKLE AMAIEZINA: Gure aplikazioa behin eta berriro egongo da ebentuak "entzuten" | |
{ | |
// Ebentua prozezatzen dugo (ebetuak gauza asko izan dezakete, adibidez teklatuko tekla bat jo | |
while (SDL_PollEvent(&event)) | |
{ | |
if (event.type == SDL_QUIT) | |
{ | |
exit(0); // Hau programa GUZTIA hixten du | |
} | |
else if (event.type == SDL_KEYDOWN) | |
{ | |
if (event.key.keysym.sym == SDLK_ESCAPE) | |
{ | |
running = 0; | |
} | |
else if (event.key.keysym.sym == SDLK_a) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_w) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.DO_S, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_s) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_e) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.RE_S, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_d) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.MI, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_f) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_t) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.FA_S, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_g) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_y) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SOL_S, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_h) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_u) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.LA_S, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_j) | |
{ | |
Mix_PlayChannel(-1, jotzen.notak.SI, 0); | |
} | |
else if (event.key.keysym.sym == SDLK_1) | |
{ | |
jotzen = piano; | |
jotzen_mota = PIANOA; | |
} | |
else if (event.key.keysym.sym == SDLK_2) | |
{ | |
jotzen = bibolina; | |
jotzen_mota = BIBOLINA; | |
} | |
else if (event.key.keysym.sym == SDLK_3) | |
{ | |
jotzen = flauta; | |
jotzen_mota = FLAUTA; | |
} | |
else if (event.key.keysym.sym == SDLK_4) | |
{ | |
jotzen = gitarra; | |
jotzen_mota = GITARRA; | |
} | |
} | |
} | |
} | |
} | |
void itzali() | |
{ | |
// Kargatuta dauzkagun soinu guztiak ezabatzen ditugu | |
Mix_FreeChunk(piano.notak.DO); | |
Mix_FreeChunk(piano.notak.DO_S); | |
Mix_FreeChunk(piano.notak.RE); | |
Mix_FreeChunk(piano.notak.RE_S); | |
Mix_FreeChunk(piano.notak.MI); | |
Mix_FreeChunk(piano.notak.FA); | |
Mix_FreeChunk(piano.notak.SOL); | |
Mix_FreeChunk(piano.notak.SOL_S); | |
Mix_FreeChunk(piano.notak.LA); | |
Mix_FreeChunk(piano.notak.LA_S); | |
Mix_FreeChunk(piano.notak.SI); | |
/* | |
Mix_FreeChunk(bibolina.notak.DO); | |
Mix_FreeChunk(bibolina.notak.DO_S); | |
Mix_FreeChunk(bibolina.notak.RE); | |
Mix_FreeChunk(bibolina.notak.RE_S); | |
Mix_FreeChunk(bibolina.notak.MI); | |
Mix_FreeChunk(bibolina.notak.FA); | |
Mix_FreeChunk(bibolina.notak.SOL); | |
Mix_FreeChunk(bibolina.notak.SOL_S); | |
Mix_FreeChunk(bibolina.notak.LA); | |
Mix_FreeChunk(bibolina.notak.LA_S); | |
Mix_FreeChunk(bibolina.notak.SI); | |
Mix_FreeChunk(gitarra.notak.DO); | |
Mix_FreeChunk(gitarra.notak.DO_S); | |
Mix_FreeChunk(gitarra.notak.RE); | |
Mix_FreeChunk(gitarra.notak.RE_S); | |
Mix_FreeChunk(gitarra.notak.MI); | |
Mix_FreeChunk(gitarra.notak.FA); | |
Mix_FreeChunk(gitarra.notak.SOL); | |
Mix_FreeChunk(gitarra.notak.SOL_S); | |
Mix_FreeChunk(gitarra.notak.LA); | |
Mix_FreeChunk(gitarra.notak.LA_S); | |
Mix_FreeChunk(gitarra.notak.SI); | |
Mix_FreeChunk(flauta.notak.DO); | |
Mix_FreeChunk(flauta.notak.DO_S); | |
Mix_FreeChunk(flauta.notak.RE); | |
Mix_FreeChunk(flauta.notak.RE_S); | |
Mix_FreeChunk(flauta.notak.MI); | |
Mix_FreeChunk(flauta.notak.FA); | |
Mix_FreeChunk(flauta.notak.SOL); | |
Mix_FreeChunk(flauta.notak.SOL_S); | |
Mix_FreeChunk(flauta.notak.LA); | |
Mix_FreeChunk(flauta.notak.LA_S); | |
Mix_FreeChunk(flauta.notak.SI); | |
*/ | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* funtzioak.h | |
* | |
* Created on: 30 may. 2017 | |
* Author: alex | |
*/ | |
#ifndef FUNTZIOAK_H_ | |
#define FUNTZIOAK_H_ | |
#include <SDL2/SDL.h> | |
#include <SDL2/SDL_mixer.h> | |
typedef enum egoera | |
{ | |
PIZTUTA, GRABATU, PAUSATU, PARATU, ERREPRODUZITU, JO | |
} EGOERA; | |
typedef enum instrumentu_mota | |
{ | |
BIBOLINA, GITARRA, FLAUTA, PIANOA | |
} INSTRUMENTU_MOTA; | |
typedef struct notak | |
{ | |
Mix_Chunk* DO; | |
Mix_Chunk* DO_S; | |
Mix_Chunk* RE; | |
Mix_Chunk* RE_S; | |
Mix_Chunk* MI; | |
Mix_Chunk* FA; | |
Mix_Chunk* FA_S; | |
Mix_Chunk* SOL; | |
Mix_Chunk* SOL_S; | |
Mix_Chunk* LA; | |
Mix_Chunk* LA_S; | |
Mix_Chunk* SI; | |
} NOTAK; | |
typedef struct instrumentua | |
{ | |
INSTRUMENTU_MOTA mota; | |
NOTAK notak; | |
} INSTRUMENTUA; | |
INSTRUMENTUA piano; | |
INSTRUMENTUA bibolina; | |
INSTRUMENTUA gitarra; | |
INSTRUMENTUA flauta; | |
EGOERA oraingo_egoera; | |
EGOERA aurreko_egoera; | |
INSTRUMENTU_MOTA jotzen_mota; | |
FILE* fitxErreproduzitu; // Erreproduzitzen ari den abestia (NULL paratuta edo beste egoeran badago) | |
FILE* fitxGrabatu; // Grabatzen ari den abestia (NULL paratuta edo beste egoeran badago) | |
int denboraPausatuta; | |
void piztu(); | |
void grabatu(); | |
void pausatu(); | |
void paratu(); | |
void erreproduzitu(); | |
void jo(); | |
void itzali(); | |
#endif /* FUNTZIOAK_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* main.c | |
* | |
* Created on: 30 may. 2017 | |
* Author: alex | |
*/ | |
#include <stdio.h> | |
#include <SDL2/SDL.h> | |
#include <SDL2/SDL_mixer.h> | |
#include "funtzioak.h" | |
int main() | |
{ | |
// SDL2 erabiltzeko gauza batzuk hastu/ireki behar ditugu | |
SDL_Init(SDL_INIT_AUDIO); // Ez da beharrezkoa SDL_INIT_VIDEO erabiltzea | |
Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048); | |
SDL_Window *window = SDL_CreateWindow("Hola!", | |
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, | |
SDL_WINDOW_OPENGL); | |
/* HAU ALDATU BEHAR DA */ | |
oraingo_egoera = GRABATU; | |
jotzen_mota = PIANOA; | |
/***********************/ | |
piztu(); | |
while (1) | |
{ | |
switch (oraingo_egoera) | |
{ | |
case PIZTUTA: | |
piztu(); | |
break; | |
case GRABATU: | |
grabatu(); | |
break; | |
case PAUSATU: | |
pausatu(); | |
break; | |
case PARATU: | |
paratu(); | |
break; | |
case ERREPRODUZITU: | |
erreproduzitu(); | |
break; | |
case JO: | |
jo(); | |
break; | |
} | |
} | |
// Gauzak itxi behar dira erabili ondoren | |
itzali(); | |
Mix_CloseAudio(); | |
SDL_Quit(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment