int DemoEntry(int argc, char *argv[]) { gSoloud.init(SoLoud::Soloud::CLIP_ROUNDOFF | SoLoud::Soloud::ENABLE_VISUALIZATION); gSoloud.setGlobalVolume(0.75); gSoloud.setPostClipScaler(0.75); gSpeechbusHandle = gSoloud.play(gSpeechbus); gSfxbusHandle = gSoloud.play(gSfxbus); gMusicbusHandle = gSoloud.play(gMusicbus); gSpeech[0].setText("There is flaky pastry in my volkswagon."); gSpeech[1].setText("The fragmentation of empiricism is hardly influential in its interdependence."); gSpeech[2].setText("Sorry, my albatros is not inflatable."); gSpeech[3].setText("The clairvoyance of omnipotence is in fact quite closed-minded in its ecology."); gSpeech[4].setText("Cheese is quite nice."); gSpeech[5].setText("Pineapple Scones with Squash and Pastrami Sandwich"); gSpeech[6].setText("The smart trader nowadays will be sure not to prorate OTC special-purpose entities."); gSpeech[7].setText("The penguins are in the toilets."); gSpeech[8].setText("Don't look, but there is a mountain lion stalking your children"); gSpeech[9].setText("The train has already gone, would you like to hire a bicycle?"); gSfxloop.load("audio/war_loop.ogg"); gSfxloop.setLooping(1); gMusicloop.load("audio/algebra_loop.ogg"); gMusicloop.setLooping(1); gSfxbus.play(gSfxloop); gMusicbus.play(gMusicloop); return 0; }
// Entry point int main(int argc, char *argv[]) { // Define a couple of variables SoLoud::Soloud soloud; // SoLoud engine core SoLoud::Speech speech; // A sound source (speech, in this case) // Configure sound source speech.setText("1 2 3 1 2 3 Hello world. Welcome to So-Loud."); // initialize SoLoud. soloud.init(); // Play the sound source (we could do this several times if we wanted) soloud.play(speech); // Wait until sounds have finished while (soloud.getActiveVoiceCount() > 0) { // Still going, sleep for a bit SoLoud::Thread::sleep(100); } // Clean up SoLoud soloud.deinit(); // All done. return 0; }
void Sound_Inspect(Asset& asset, bool deselected) { static int handle; static SoLoud::Bus bus; if (deselected) { soloud.stopAll(); return; } bus.setVisualizationEnable(true); SoLoud::AudioSource *src = (SoLoud::AudioSource*) asset.resource; ImGui::Text("Channels: %i", src->mChannels); ImGui::Text("Sample Rate: %0.f", src->mBaseSamplerate); int voice = soloud.getVoiceFromHandle(handle); if (ImGui::Button(voice == -1 ? "Play" : "Stop")) { if (voice != -1) { bus.stop(); } else { soloud.stopAll(); soloud.play(bus); handle = bus.play(*src); } } float *fft = bus.calcFFT(); ImGui::PlotHistogram("##FFT", fft, 256 / 2, 0, nullptr, 0, 20, ImVec2(0, 160), 8); }
unsigned int Snd_Play(AssetHandle assetHandle, float volume, float pan, bool loop) { Asset* asset = Asset_Get(ASSET_ANY, assetHandle); if (asset->type != ASSET_SOUND && asset->type != ASSET_SPEECH && asset->type != ASSET_MOD) { Con_Error(ERR_GAME, "asset not valid"); return 0; } if (asset->resource == nullptr) { Con_Error(ERR_GAME, "asset resource not valid"); return 0; } SoLoud::AudioSource *src = (SoLoud::AudioSource*) asset->resource; src->setLooping(loop); return soloud.play(*src, volume, pan); }
int DemoEntry(int argc, char *argv[]) { gMusic.load("audio/Jakim - Aboriginal Derivatives.mon"); gMusic.setParams(10); gEcho.setParams(0.2f, 0.5f, 0.05f); gBiquad.setParams(SoLoud::BiquadResonantFilter::LOWPASS, 44100, 4000, 2); gMusic.setLooping(1); gMusic.setFilter(0, &gBiquad); gMusic.setFilter(1, &gLofi); gMusic.setFilter(2, &gEcho); gMusic.setFilter(3, &gDCRemoval); gSoloud.init(SoLoud::Soloud::CLIP_ROUNDOFF | SoLoud::Soloud::ENABLE_VISUALIZATION); gMusichandle = gSoloud.play(gMusic); waveform = SoLoud::Monotone::SAW; gMusic.setParams(hwchannels, waveform); return 0; }
// Entry point int main(int argc, char *argv[]) { DemoInit(); gMusic.load("audio/Jakim - Aboriginal Derivatives.mon"); gMusic.setParams(10); gEcho.setParams(0.2f, 0.5f, 0.05f); gBiquad.setParams(SoLoud::BiquadResonantFilter::LOWPASS, 44100, 4000, 2); gMusic.setLooping(1); gMusic.setFilter(0, &gBiquad); gMusic.setFilter(1, &gLofi); gMusic.setFilter(2, &gEcho); gMusic.setFilter(3, &gDCRemoval); gSoloud.init(SoLoud::Soloud::CLIP_ROUNDOFF | SoLoud::Soloud::ENABLE_VISUALIZATION); gMusichandle = gSoloud.play(gMusic); float filter_param0[4] = { 0, 0, 0, 0 }; float filter_param1[4] = { 1000, 8000, 0, 0 }; float filter_param2[4] = { 2, 3, 0, 0 }; int hwchannels = 4; int waveform = 0; // Main loop: loop forever. while (1) { gSoloud.setFilterParameter(gMusichandle, 0, 0, filter_param0[0]); gSoloud.setFilterParameter(gMusichandle, 1, 0, filter_param0[1]); gSoloud.setFilterParameter(gMusichandle, 2, 0, filter_param0[2]); gSoloud.setFilterParameter(gMusichandle, 3, 0, filter_param0[3]); gSoloud.setFilterParameter(gMusichandle, 0, 2, filter_param1[0]); gSoloud.setFilterParameter(gMusichandle, 0, 3, filter_param2[0]); gSoloud.setFilterParameter(gMusichandle, 1, 1, filter_param1[1]); gSoloud.setFilterParameter(gMusichandle, 1, 2, filter_param2[1]); DemoUpdateStart(); float *buf = gSoloud.getWave(); float *fft = gSoloud.calcFFT(); ONCE(ImGui::SetNextWindowPos(ImVec2(500, 20))); ImGui::Begin("Output"); ImGui::PlotLines("##Wave", buf, 256, 0, "Wave", -1, 1, ImVec2(264, 80)); ImGui::PlotHistogram("##FFT", fft, 256/2, 0, "FFT", 0, 10, ImVec2(264,80),8); ImGui::Text("Music volume : %d%%", (int)floor(gSoloud.getVolume(gMusichandle) * 100)); ImGui::Text("Active voices : %d", gSoloud.getActiveVoiceCount()); ImGui::End(); ONCE(ImGui::SetNextWindowPos(ImVec2(20, 20))); ImGui::Begin("Control"); if (ImGui::SliderInt("Channels", &hwchannels, 1, 4)) { gMusic.setParams(hwchannels, waveform); } if (ImGui::CollapsingHeader("Waveform", (const char*)0, true, false)) { if (ImGui::RadioButton("Square", waveform == SoLoud::Monotone::SQUARE)) { waveform = SoLoud::Monotone::SQUARE; gMusic.setParams(hwchannels, waveform); } if (ImGui::RadioButton("Saw", waveform == SoLoud::Monotone::SAW)) { waveform = SoLoud::Monotone::SAW; gMusic.setParams(hwchannels, waveform); } if (ImGui::RadioButton("Sin", waveform == SoLoud::Monotone::SIN)) { waveform = SoLoud::Monotone::SIN; gMusic.setParams(hwchannels, waveform); } if (ImGui::RadioButton("SawSin", waveform == SoLoud::Monotone::SAWSIN)) { waveform = SoLoud::Monotone::SAWSIN; gMusic.setParams(hwchannels, waveform); } } ImGui::Separator(); ImGui::Text("Biquad filter (lowpass)"); ImGui::SliderFloat("Wet##4", &filter_param0[0], 0, 1); ImGui::SliderFloat("Frequency##4", &filter_param1[0], 0, 8000); ImGui::SliderFloat("Resonance##4", &filter_param2[0], 1, 20); ImGui::Separator(); ImGui::Text("Lofi filter"); ImGui::SliderFloat("Wet##2", &filter_param0[1], 0, 1); ImGui::SliderFloat("Rate##2", &filter_param1[1], 1000, 8000); ImGui::SliderFloat("Bit depth##2", &filter_param2[1], 0, 8); ImGui::Separator(); ImGui::Text("Echo filter"); ImGui::SliderFloat("Wet##3", &filter_param0[2], 0, 1); ImGui::Separator(); ImGui::Text("DC removal filter"); ImGui::SliderFloat("Wet##1", &filter_param0[3], 0, 1); ImGui::End(); DemoUpdateEnd(); } return 0; }
// Entry point int main(int argc, char *argv[]) { gMusic1.load("audio/plonk_wet.ogg"); gMusic2.load("audio/plonk_dry.ogg"); gMusic1.setLooping(1); gMusic2.setLooping(1); // Initialize SDL's subsystems - in this case, only video. if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); exit(1); } gSoloud.init(SoLoud::Soloud::CLIP_ROUNDOFF | SoLoud::Soloud::ENABLE_VISUALIZATION); // Register SDL_Quit to be called at exit; makes sure things are // cleaned up when we quit. atexit(SDL_Quit); // Attempt to create a 640x480 window with 32bit pixels. screen = SDL_SetVideoMode(400, 256, 32, SDL_SWSURFACE); font = SDL_LoadBMP("graphics/font.bmp"); // If we fail, return error. if ( screen == NULL ) { fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError()); exit(1); } gMusichandle1 = gSoloud.play(gMusic1,0,0,1); gMusichandle2 = gSoloud.play(gMusic2,1,0,1); SoLoud::handle grouphandle = gSoloud.createVoiceGroup(); gSoloud.addVoiceToGroup(grouphandle, gMusichandle1); gSoloud.addVoiceToGroup(grouphandle, gMusichandle2); gSoloud.setProtectVoice(grouphandle, 1); // protect all voices in group gSoloud.setPause(grouphandle, 0); // unpause all voices in group gSoloud.destroyVoiceGroup(grouphandle); // remove group, leaves voices alone int cycle = 0; // Main loop: loop forever. while (1) { cycle++; // Render stuff render(); // Poll for events, and handle the ones we care about. SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_1: gSfx.loadPreset(SoLoud::Sfxr::EXPLOSION, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_2: gSfx.loadPreset(SoLoud::Sfxr::BLIP, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_3: gSfx.loadPreset(SoLoud::Sfxr::COIN, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_4: gSfx.loadPreset(SoLoud::Sfxr::HURT, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_5: gSfx.loadPreset(SoLoud::Sfxr::JUMP, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_6: gSfx.loadPreset(SoLoud::Sfxr::LASER, cycle); gSoloud.play(gSfx, 1, ((rand()%512)-256)/256.0f); break; case SDLK_7: gSoloud.fadeVolume(gMusichandle1, 1, 2); gSoloud.fadeVolume(gMusichandle2, 0, 2); break; case SDLK_8: gSoloud.fadeVolume(gMusichandle2, 1, 2); gSoloud.fadeVolume(gMusichandle1, 0, 2); break; case SDLK_9: gSoloud.fadeRelativePlaySpeed(gMusichandle1, 0.2f, 5); gSoloud.fadeRelativePlaySpeed(gMusichandle2, 0.2f, 5); break; case SDLK_0: gSoloud.fadeRelativePlaySpeed(gMusichandle1, 1, 5); gSoloud.fadeRelativePlaySpeed(gMusichandle2, 1, 5); break; } break; case SDL_KEYUP: // If escape is pressed, return (and thus, quit) if (event.key.keysym.sym == SDLK_ESCAPE) { gSoloud.deinit(); return 0; } break; case SDL_QUIT: gSoloud.deinit(); return(0); } } } return 0; }