From d5262780f4922194bd38dbc57cf0397c2f3ff9dc Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 15 Sep 2021 11:58:22 +0200 Subject: [PATCH] now using AudioCallback --- main.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index 33a163e..199c71e 100755 --- a/main.cpp +++ b/main.cpp @@ -25,7 +25,20 @@ int current_instrument = 0; int current_volume = 2; int current_effect = 0; -SDL_AudioSpec audioSpec{SAMPLES_PER_SECOND, AUDIO_FORMAT, 1, 0, 512, 0, 0, NULL, NULL}; +toneGen tonegen(SOUND_NUM_SAMPLES); +SDL_AudioDeviceID sdlAudioDevice; + +void audioCallback(void* userdata, Uint8* stream, int len) { + Sint16* buffer = (Sint16*)stream; + int numSamples = tonegen.getSamples(len >> 1, buffer); + if (numSamples*2 < len) { + int rest = len - numSamples*2; + SDL_memset(&stream[numSamples*2], 0, rest); + SDL_PauseAudioDevice(sdlAudioDevice, 1); + } +} + +SDL_AudioSpec audioSpec{SAMPLES_PER_SECOND, AUDIO_FORMAT, 1, 0, 512, 0, 0, &audioCallback, NULL}; const char get_hex(const uint8_t num) { static const char hexstr[17] = "0123456789ABCDEF"; @@ -35,15 +48,14 @@ const char get_hex(const uint8_t num) { int main(int argc, char* argv[]) { pattern[0][0] = (34<<10) + (2<<8) + (7<<4) + 5; SDL_Init(SDL_INIT_EVERYTHING); - SDL_AudioDeviceID sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); + sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); AUDIO_FORMAT_TYPE beeps[int(SOUND_NUM_SAMPLES*8)]; AUDIO_FORMAT_TYPE beeps2[int(SOUND_NUM_SAMPLES*8)]; AUDIO_FORMAT_TYPE *pointer = beeps; - toneGen tonegen(SOUND_NUM_SAMPLES); - tonegen.setup(22, CHIPTUNE_INSTRUMENT_TRIANGLE, 13, CHIPTUNE_EFFECT_DROP); + /*tonegen.setup(22, CHIPTUNE_INSTRUMENT_TRIANGLE, 13, CHIPTUNE_EFFECT_DROP); int numSamples = tonegen.getSamples(SOUND_NUM_SAMPLES, pointer); pointer += int(SOUND_NUM_SAMPLES); tonegen.setup(32, CHIPTUNE_INSTRUMENT_SQUARE, 0, CHIPTUNE_EFFECT_NONE); numSamples = tonegen.getSamples(SOUND_NUM_SAMPLES, pointer); pointer += int(SOUND_NUM_SAMPLES); @@ -77,6 +89,7 @@ int main(int argc, char* argv[]) { numSamples = tonegen.getSamples(SOUND_NUM_SAMPLES, pointer); pointer += int(SOUND_NUM_SAMPLES); tonegen.setup(47, CHIPTUNE_INSTRUMENT_SQUARE, 1, CHIPTUNE_EFFECT_NONE); numSamples = tonegen.getSamples(SOUND_NUM_SAMPLES, pointer); pointer += int(SOUND_NUM_SAMPLES); + */ for (int i=0; i