Mercurial > hg > Game > Cerium
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 */