Mercurial > hg > Game > Cerium
annotate example/synthesizer/ppe/OSC.cc @ 2048:6796d85f3d6b draft
remove error
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 28 Jan 2016 00:05:49 +0900 |
parents | 652dd569acc1 |
children |
rev | line source |
---|---|
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include <stdio.h> |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 #include <string.h> |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 #include "AudioData.h" |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 #include "Func.h" |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 #include "OSC.h" |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 #include <sdl.h> |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 #include <SDL_audio.h> |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 #include <math.h> |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 /* これは必須 */ |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 SchedDefineTask1(Audioosc,osc); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 SDL_AudioSpec Desired; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 SDL_AudioSpec Obtained; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 |
2026
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
16 double |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
17 square(double t) |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
18 { |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 double decimal_part = t - abs(t); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 return decimal_part < 0.5 ? 1 : -1; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 |
2026
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
23 double |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
24 tri(double t) |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
25 { |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 double decimal_part = t - abs(t); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 if(abs(t) % 2 != 0){ |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 return decimal_part < 0.5 ? decimal_part : 1 - decimal_part; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 }else{ |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 return decimal_part < 0.5 ? -decimal_part : 1 - decimal_part; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 |
2026
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
34 double |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
35 saw(double t) |
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
36 { |
2025
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
37 double decimal_part = t - abs(t); |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
38 return decimal_part; |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
39 } |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
40 |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
2022
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
42 void callback(void *userdata,Uint8 *stream,int len){ |
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
43 |
2023
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
44 AudioDataPtr au = (AudioData*)userdata; |
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
45 |
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
46 char *waveform_name = au->waveform_name; |
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
47 double frequency = au->frequency; |
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
48 int volume = au->volume; |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 static unsigned int step = 0; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 Uint16 *frames = (Uint16 *) stream; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 int framesize = len / 2; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
2025
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
53 if(strcmp(waveform_name, "tri") == 0){ |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 for (int i = 0; i < framesize ; i++, step++){ |
2023
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
55 frames[i] = tri(step * frequency / Obtained.freq) * volume ; |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 |
2025
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
58 }else if(strcmp(waveform_name, "sqr") == 0){ |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 for (int i = 0; i < framesize ; i++, step++){ |
2023
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
60 frames[i] = square(step * frequency / Obtained.freq) * volume ; |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 |
2025
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
63 }else if(strcmp(waveform_name, "saw") == 0){ |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
64 for (int i = 0; i < framesize ; i++, step++){ |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
65 frames[i] = saw(step * frequency / Obtained.freq) * volume ; |
f31415b52f51
implement saw
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2023
diff
changeset
|
66 } |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 } |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 static int |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 osc(SchedTask *s, void *rbuf, void *wbuf) |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 { |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 AudioData *i_data = (AudioDataPtr)s->get_input(0); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 |
2023
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
75 Desired.freq = i_data->sampling_rate; /* Sampling rate: 44100Hz */ |
2022
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
76 Desired.format = i_data->format; /* 16-bit signed audio */ |
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
77 Desired.channels = i_data->channels; /* Mono */ |
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
78 Desired.samples = i_data->samples; /* Buffer size: 8K = 0.37 sec. */ |
fac44ad2867d
make a sound
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2020
diff
changeset
|
79 Desired.callback = callback; |
2023
8c3c826ba4d5
add make command "make test"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2022
diff
changeset
|
80 Desired.userdata = (void*)i_data; |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 SDL_OpenAudio(&Desired, &Obtained); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 SDL_PauseAudio(0); |
2026
652dd569acc1
add audio_settings function
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
2025
diff
changeset
|
84 SDL_Delay(1000); |
2020
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 SDL_Quit(); |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 return 0; |
6849865f96eb
add synthesizer project
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 } |