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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }