/
main.c
120 lines (104 loc) · 2.76 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "SDL/SDL.h"
#include "mixer.h"
#include "player.h"
#include "oscillators.h"
SDL_Event event;
Mixer* m;
Player* p;
long t = 0;
int ticker = 0;
const int CHANNELS = 2;
const int FREQUENCY = 44100;
// Buffer fill-upper
void fill_audio(void *data,Uint8 *stream,int len)
{
short *buff;
int i;
// Cast
buff = (short*)stream;
len /= 2; //Because we're now using shorts
//Noise
for(i = 0;i < len;i+=2){
//buff[i] = (short)(30000 * osc_squ(pitch + sin((double)(t/10000.0)),t) );
while(ticker > (int)(CHANNELS*FREQUENCY/p->ticks_per_second)){
player_forward(p);
ticker -= (int)(CHANNELS*FREQUENCY/p->ticks_per_second);
}ticker+=2;
buff[i] = mixer_render(m,t);
buff[i+1] = buff[i];
t+=2;
}
}
//Open the audio device to what we want
void open_audio()
{
SDL_AudioSpec as;
SDL_Init(SDL_INIT_AUDIO);
as.freq = 44100;
as.format = AUDIO_S16SYS;
as.channels = 2;
as.samples = 1024;
as.callback = fill_audio;
SDL_OpenAudio(&as,NULL);
SDL_PauseAudio(0);
}
void close_audio()
{
SDL_CloseAudio();
SDL_Quit();
}
int main(int argc, char**argv)
{
int running = 1;
m = create_mixer();
p = create_player(m);
if(argc == 2){
player_load(p, argv[1]);
}else{
player_load(p, "res/silent_light.mid");
}
/*
mixer_add_instrument(m,create_instrument(OSC_SQU));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
mixer_add_instrument(m,create_instrument(OSC_SAW));
*/
//SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
// Open the audio
open_audio();
while(running){
while(SDL_PollEvent( &event )){
switch( event.type ){
case SDL_KEYDOWN:
switch( event.key.keysym.sym ){
case SDLK_ESCAPE:
running = 0;
default:;
}
break;
case SDL_QUIT:
running = 0;
break;
}
}
SDL_Delay(1);
}
// Close audio
close_audio();
return 0;
}