main.cpp 2.79 KB
#include <iostream>
#include "wavdata.h"
#include "fft.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>


#define DELAY 5000
#define TOUCH 30000
#define AMPLITUDE 0.5

#define DO_FREQ 16744
#define RE_FREQ 18794
#define MI_FREQ 21096
#define FA_FREQ 22350
#define SOL_FREQ 25087
#define LA_FREQ 28160
#define SI_FREQ 31608

#define MAX_NOTES 7


char * sounds[MAX_NOTES];
char buttons[MAX_NOTES];
int freqs[MAX_NOTES];
    
void save(int freq, char * filename) {
    WavData data;
    data.load("COW.WAV");
    
    data.setFrequency(freq);
    
    char * data_do = data.data();
    char *data2 = new char[data.datasize()/2];

    // accelerate in 2 times
	int i;
    int j = 0;
	for(i=0;i<data.datasize();i+=2) {
		data2[j]=data_do[i];
        j++;
    }
    
    // resize to one size (TOUCH)
    int size = data.datasize()/2;
    if (size > TOUCH) size = TOUCH;
    
    data.clearData();
	data.setDatasize(size);
	data.setData(data2);

    // save with its filename
    data.save(filename);
}

void generate_sounds() {
    for (int i = 0; i < MAX_NOTES; i++) {
        save(freqs[i], sounds[i]);
    }
}

int play_music(char* filename) {
    
    char command[256];
    int status;
    
    /* make a command*/
    sprintf( command, "aplay -c 1 -q -t wav %s", filename );

    /* execute command of play*/
    status = system( command );
     
    return status;
}

int run_sound(char button) {
    
    for(int i = 0; i < MAX_NOTES; i++ ) {
        if (buttons[i] == button) {
            return play_music(sounds[i]);
        }
    }
    
    return -1;
}

void load_data() {
    sounds[0] = "DO.WAV",
    sounds[1] = "RE.WAV",
    sounds[2] = "MI.WAV",
    sounds[3] = "FA.WAV",
    sounds[4] = "SOL.WAV",
    sounds[5] = "LA.WAV",
    sounds[6] = "SI.WAV";
    
    buttons[0] = 'q';
    buttons[1] = 's';
    buttons[2] = 'd';
    buttons[3] = 'f';
    buttons[4] = 'g';
    buttons[5] = 'h';
    buttons[6] = 'j';
    
    freqs[0] = DO_FREQ;
    freqs[1] = RE_FREQ;
    freqs[2] = MI_FREQ;
    freqs[3] = FA_FREQ;
    freqs[4] = SOL_FREQ;
    freqs[5] = LA_FREQ;
    freqs[6] = SI_FREQ;
}

int main(int argc, char **argv)
{
    
    char button;
    
    /* load sounds, buttons and frequencies*/
    load_data();
    
    /* generate sounds from do to si (you'll find them in the same repository)*/
    generate_sounds();
    
    printf("You can play on the keyboards q-j which corresponds to the notes do - si\n. To exit press e.\n  Enjoy!\n");
    
    /* reconfigure consol to detect pressed key without enter pressing*/
    system ("/bin/stty raw");

    /* char can be read without enter; to stop it - . should be pressed*/    
    while((button=getchar())!= '.') {
        putchar(button);
        run_sound(button);
    }
    
    /* return to normal consol mode*/
    system ("/bin/stty cooked");
    
    return 0;
    
}