view example/synthesizer/main.cc @ 2022:fac44ad2867d draft

make a sound
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Wed, 16 Jul 2014 02:50:32 +0900
parents 6849865f96eb
children 8c3c826ba4d5
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;

const char *usr_help_str = "Usage: ./word_count [-a -c -s] [-cpu spe_num] [-g] [-file filename] [-br]\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->freq= 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->callback= callback;
    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[])
{
    task_init();
    run_start(manager);
    return 0;
}
/* end */