From d23b5c21e100c075bf9b806cec45f0ad0f48301d Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Sat, 23 Sep 2017 11:11:56 +0200 Subject: working on sound --- main.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 5 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index 42c547b..8fda90d 100644 --- a/main.cpp +++ b/main.cpp @@ -48,6 +48,57 @@ struct Context }; +static Uint32 wavLength; +static Uint8 *wavBuffer; + +int sample=0; + +void audiomixer(void *userdata, Uint8 *stream, int len) +{ + int volume=15000; + + for(int i=0;iwavLength)stream[i]=0; + sample++; + } + return; + + int samples = len / 4; + short *buf = (short*)stream; + +/* + for (i = 0; i < samples*2; i+=2) + { + buf[i]=buf[i+1] = volume*sin(sample*440/4410/2); + if((sample/44100)%2==1)buf[i]=buf[i+1]=0; + buf[i]+=volume*sin(sample*261/4410/2); + sample++; + } +*/ + + +} + +void show_AudioSpec(SDL_AudioSpec *as) +{ + std::cout << "freq: " << as->freq << std::endl; + + std::cout << "bitsize: " << SDL_AUDIO_BITSIZE(as->format) << std::endl; + std::cout << "float: " << (bool)SDL_AUDIO_ISFLOAT(as->format) << std::endl; + std::cout << "bigendian: " << (bool)SDL_AUDIO_ISBIGENDIAN(as->format) << std::endl; + std::cout << "signed: " << (bool)SDL_AUDIO_ISSIGNED(as->format) << std::endl; + std::cout << "int: " << (bool)SDL_AUDIO_ISINT(as->format) << std::endl; + std::cout << "littleendian: " << (bool)SDL_AUDIO_ISLITTLEENDIAN(as->format) << std::endl; + std::cout << "unsigned: " << (bool)SDL_AUDIO_ISUNSIGNED(as->format) << std::endl; + + + std::cout << "channels: " << (int)as->channels << std::endl; + std::cout << "samples (buffer): " << as->samples << std::endl; + std::cout << "callback func: " << as->callback << std::endl; +} + // audio from http://www.brainybetty.com/soundsforpowerpoint2.htm // https://freesound.org/people/ProjectsU012/sounds/341695/ void sdl_play_sound() @@ -55,15 +106,32 @@ void sdl_play_sound() static bool first=true; static SDL_AudioSpec wavSpec; - static Uint32 wavLength; - static Uint8 *wavBuffer; static SDL_AudioDeviceID deviceId; if (first) { - SDL_LoadWAV("coin.wav", &wavSpec, &wavBuffer, &wavLength); + std::cout << "---desired load wav---" << std::endl; + show_AudioSpec(&wavSpec); + + SDL_AudioSpec *spec=SDL_LoadWAV("coin.wav", &wavSpec, &wavBuffer, &wavLength); + + std::cout << "---desired load wav---" << std::endl; + show_AudioSpec(&wavSpec); + std::cout << "---wav source data---" << std::endl; + if(spec==NULL) + { + + std::cout << "SDL_LoadWavError: " << SDL_GetError() << std::endl; + exit(-1); + } + show_AudioSpec(spec); // open most reasonable default device for playback. + std::cout << "---" << std::endl; + wavSpec.callback = audiomixer; deviceId = SDL_OpenAudioDevice(NULL, 0, &wavSpec, NULL, 0); + show_AudioSpec(&wavSpec); + std::cout << "---" << std::endl; + SDL_PauseAudioDevice(deviceId, 0); first=false; } @@ -72,7 +140,7 @@ void sdl_play_sound() // SDL_LoadWAV("music.wav", &wavSpec, &wavBuffer, &wavLength); // SDL_LoadWAV("win.wav", &wavSpec, &wavBuffer, &wavLength); - int success = SDL_QueueAudio(deviceId, wavBuffer, wavLength); +// int success = SDL_QueueAudio(deviceId, wavBuffer, wavLength); #ifndef __EMSCRIPTEN__ #endif @@ -342,8 +410,8 @@ void main_loop(void *arg) SDL_RenderPresent(ctx->ren); if(ctx->world.player.collected_coin) { - sdl_play_sound(); ctx->world.player.collected_coin=false; + sample=0; } // progress world simu @@ -385,6 +453,7 @@ int main(int, char**){ ctx->show_tiles_back=ctx->win_width/ctx->show_tiles_size*0.25; ctx->show_tiles_front=ctx->win_width/ctx->show_tiles_size*1; + sdl_play_sound(); #ifdef __EMSCRIPTEN__ int simulate_infinite_loop = 1; -- cgit v1.2.3