[FEAT] Audio is working

This commit is contained in:
2021-12-04 09:42:33 +01:00
parent 280ca2ceca
commit 0482467037
2 changed files with 29 additions and 1 deletions

View File

@@ -14,6 +14,9 @@ uint8_t screen_height = 30;
uint8_t current_color = 0x1e;
uint8_t cursor_x = 0;
uint8_t cursor_y = 0;
bool sounding = false;
int audio_freq = 0;
uint32_t audio_len = 0;
#define CHRSCR(x, y) char_screen[x+y*screen_width]
#define COLSCR(x, y) color_screen[x+y*screen_width]
@@ -21,6 +24,7 @@ uint8_t cursor_y = 0;
SDL_Window *mini_win;
SDL_Renderer *mini_ren;
SDL_Texture *mini_bak;
SDL_AudioDeviceID mini_audio_device;
Uint32 *pixels;
int pitch;
@@ -48,6 +52,19 @@ void reinit() {
cursor_y = 0;
}
void audioCallback(void * userdata, uint8_t * stream, int len) {
//if (audio_len <= 0) nosound();
static int period=0;
static int v = 16;
SDL_memset(stream, 0, len);
const int flen = min(audio_len, len);
audio_len -= flen;
for (int i=0; i<flen; ++i) {
stream[i] = v;
period++; if (period>=audio_freq) {period = 0; v=-v;}
}
}
int main(int argc,char*argv[]) {
for (int i=0; i<debug_total_size;++i) debug_text[i] = 32;
@@ -61,6 +78,10 @@ int main(int argc,char*argv[]) {
bool exit = false;
SDL_Event mini_eve;
SDL_AudioSpec audioSpec{44100, AUDIO_S8, 1, 0, 512, 0, 0, audioCallback, NULL};
mini_audio_device = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0);
SDL_PauseAudioDevice(mini_audio_device, 0);
reinit();
debug("ASCII SYSTEM BOOTING...");
lua_init();
@@ -308,8 +329,13 @@ void poke(uint16_t addr, uint8_t val) {
void sound(float freq, uint32_t len) {
// [TODO]
audio_len = len*44.1f;
audio_freq = 44100.0f/freq/2.0f;
sounding = true;
}
void nosound() {
// [TODO]
//SDL_PauseAudioDevice(mini_audio_device, 1);
audio_len = 0;
sounding = false;
}