view example/synthesizer/main.cc @ 2023:8c3c826ba4d5 draft

add make command "make test"
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 21 Jul 2014 18:49:17 +0900
parents fac44ad2867d
children 472528b62bbf
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
#include "TaskManager.h"
#include "SchedTask.h"
#include "Func.h"
#include "AudioData.h"

#include <sdl.h>
#include <SDL_audio.h>
#include <math.h>

/*
 * PS3でCPU数が2以上の時に、あまりが計算されてない
 */

extern void task_init();
CPU_TYPE spe_cpu = SPE_ANY;
int volume = 3000;
double frequency = 440;
char *waveform_name = "tri";

const char *usr_help_str = "Usage: ./synthesizer [-freq freqency] [-wave \"sqr\" or \"tri\"] [-vol volume]\n";

static void
run_start(TaskManager *manager)
{
    AudioDataPtr au = (AudioDataPtr)manager->allocate(sizeof(AudioData));
    au->self = au;

    au->volume = volume;
    au->frequency = frequency;
    au->waveform_name = waveform_name;

    printf("Freq:%f\n",frequency);
    au->sampling_rate= 44100; /* Sampling rate: 44100Hz */
    au->format= AUDIO_S16LSB; /* 16-bit signed audio */
    au->channels= 1; /* Mono */
    au->samples= 8192; /* Buffer size: 8K = 0.37 sec. */
    au->userdata= NULL;

    HTaskPtr osc = manager->create_task(OSC_TASK);
    osc->set_inData(0,au,sizeof(AudioDataPtr));
    osc->spawn();
}

void
init(int argc, char **argv)
{
    for (int i = 1; argv[i]; ++i) {
        if (strcmp(argv[i], "-freq") == 0) {
            frequency = atof(argv[i+1]);
        } else if (strcmp(argv[i], "-wave") == 0) {
            waveform_name = argv[i+1];
        } else if (strcmp(argv[i], "-vol") == 0) {
            volume = atof(argv[i+1]);
        }
    }
}


int
TMmain(TaskManager *manager, int argc, char *argv[])
{
    init(argc, argv);
    if(argc == 1) {
        printf("%s",usr_help_str);
        printf("Default settings\n");
        printf("frequency   :%fHz(A)\n",frequency);
        printf("wave        :%s\n",waveform_name);
        printf("Volume      :%d\n",volume);
    }

    task_init();
    run_start(manager);
    return 0;
}
/* end */