FMOD_RESULT F_CALLBACK AudioEngine::channelCallback(FMOD_CHANNELCONTROL *chanControl, FMOD_CHANNELCONTROL_TYPE controlType, FMOD_CHANNELCONTROL_CALLBACK_TYPE callbackType, void *commandData1, void *commandData2) { // We only care about when the sound ends if(callbackType != FMOD_CHANNELCONTROL_CALLBACK_END) return FMOD_OK; if (controlType == FMOD_CHANNELCONTROL_CHANNEL) { FMOD::Channel *channel = (FMOD::Channel *)chanControl; // Channel specific functions here... AudioEngine * engine; result = channel->getUserData((void**)(&engine)); errorCheck(); FMOD::Sound* sound; channel->getCurrentSound(&sound); if(sound == engine->brakeSound) { PhysicsEntity* source = engine->currentlyPlaying[channel]; engine->vehicleLoops[source].brake = false; } auto iter = engine->currentlyPlaying.find(channel); engine->currentlyPlaying.erase(iter); } else { FMOD::ChannelGroup *group = (FMOD::ChannelGroup *)chanControl; // ChannelGroup specific functions here... (but we don't use channelgroups) } // ChannelControl generic functions here... return FMOD_OK; }
int main(int argc, char *argv[]) { FMOD::System *system; FMOD::Sound *sound1, *sound2, *sound3; FMOD::Channel *channel = 0; FMOD_RESULT result; int key; unsigned int version; /* Global Settings */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); getch(); return 0; } result = system->init(32, FMOD_INIT_NORMAL, NULL); ERRCHECK(result); result = system->createSound("../media/drumloop.wav", FMOD_SOFTWARE, 0, &sound1); ERRCHECK(result); result = sound1->setMode(FMOD_LOOP_OFF); ERRCHECK(result); result = system->createSound("../media/jaguar.wav", FMOD_SOFTWARE, 0, &sound2); ERRCHECK(result); result = system->createSound("../media/swish.wav", FMOD_SOFTWARE, 0, &sound3); ERRCHECK(result); printf("===================================================================\n"); printf("PlaySound Example. Copyright (c) Firelight Technologies 2004-2011.\n"); printf("===================================================================\n"); printf("\n"); printf("Press '1' to Play a mono sound using software mixing\n"); printf("Press '2' to Play a mono sound using software mixing\n"); printf("Press '3' to Play a stereo sound using software mixing\n"); printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (kbhit()) { key = getch(); switch (key) { case '1' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, 0, &channel); ERRCHECK(result); break; } case '2' : { result = system->playSound(FMOD_CHANNEL_FREE, sound2, 0, &channel); ERRCHECK(result); break; } case '3' : { result = system->playSound(FMOD_CHANNEL_FREE, sound3, 0, &channel); ERRCHECK(result); break; } } } system->update(); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = 0; bool paused = 0; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); printf("\rTime %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); fflush(stdout); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = sound3->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }
int FMOD_Main() { FMOD::System *system; FMOD::Sound *sound1, *sound2; FMOD::Channel *channel = 0; FMOD_RESULT result; unsigned int version; int selection = 0; void *extradriverdata = 0; FMOD_SPEAKERMODE speakermode = FMOD_SPEAKERMODE_STEREO; Common_Init(&extradriverdata); /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { Common_Fatal("FMOD lib version %08x doesn't match header version %08x", version, FMOD_VERSION); } result = system->init(32, FMOD_INIT_NORMAL, extradriverdata); ERRCHECK(result); result = system->getSoftwareFormat(0, &speakermode, 0); ERRCHECK(result); result = system->createSound(Common_MediaPath("drumloop.wav"), FMOD_2D | FMOD_LOOP_OFF, 0, &sound1); ERRCHECK(result); result = system->createSound(Common_MediaPath("stereo.ogg"), FMOD_2D | FMOD_LOOP_OFF, 0, &sound2); ERRCHECK(result); /* Main loop. */ do { Common_Update(); if (Common_BtnPress(BTN_UP) && (selection != 0)) { selection--; } if (Common_BtnPress(BTN_DOWN) && (selection != (SELECTION_COUNT - 1))) { selection++; } if (Common_BtnPress(BTN_ACTION1) && isSelectionAvailable(speakermode, selection)) { if (selection == 0) /* Mono front left */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(1.0f, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 1) /* Mono front right */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 1.0f, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 2) /* Mono center */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 0, 1.0f, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 3) /* Mono surround left */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 0, 0, 0, 1.0f, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 4) /* Mono surround right */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 0, 0, 0, 0, 1.0f, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 5) /* Mono rear left */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 0, 0, 0, 0, 0, 1.0f, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 6) /* Mono rear right */ { result = system->playSound(sound1, 0, true, &channel); ERRCHECK(result); result = channel->setMixLevelsOutput(0, 0, 0, 0, 0, 0, 0, 1.0f); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 7) /* Stereo front */ { result = system->playSound(sound2, 0, false, &channel); ERRCHECK(result); } else if (selection == 8) /* Stereo front channel swapped */ { float matrix[] = { 0.0f, 1.0f, 1.0f, 0.0f }; result = system->playSound(sound2, 0, true, &channel); ERRCHECK(result); result = channel->setMixMatrix(matrix, 2, 2); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } else if (selection == 9) /* Stereo (right only) center */ { float matrix[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; result = system->playSound(sound2, 0, true, &channel); ERRCHECK(result); result = channel->setMixMatrix(matrix, 3, 2); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } } result = system->update(); ERRCHECK(result); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = false; bool paused = false; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } result = system->getChannelsPlaying(&channelsplaying); ERRCHECK(result); Common_Draw("=================================================="); Common_Draw("Multiple Speaker Example."); Common_Draw("Copyright (c) Firelight Technologies 2004-2015."); Common_Draw("=================================================="); Common_Draw(""); Common_Draw("Speaker mode is set to %s%s", SPEAKERMODE_STRING[speakermode], speakermode < FMOD_SPEAKERMODE_7POINT1 ? " causing some speaker options to be unavailable" : ""); Common_Draw(""); Common_Draw("Press %s or %s to select mode", Common_BtnStr(BTN_UP), Common_BtnStr(BTN_DOWN)); Common_Draw("Press %s to play the sound", Common_BtnStr(BTN_ACTION1)); for (int i = 0; i < SELECTION_COUNT; i++) { bool disabled = !isSelectionAvailable(speakermode, i); Common_Draw("[%c] %s%s", (selection == i) ? (disabled ? '-' : 'X') : ' ', disabled ? "[N/A] " : "", SELECTION_STRING[i]); } Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT)); Common_Draw(""); Common_Draw("Time %02d:%02d:%02d/%02d:%02d:%02d : %s", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped"); Common_Draw("Channels playing: %d", channelsplaying); } Common_Sleep(50); } while (!Common_BtnPress(BTN_QUIT)); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); Common_Close(); return 0; }
int main(int argc, char *argv[]) { FMOD::System *system; FMOD::Sound *sound1, *sound2; FMOD::Channel *channel = 0; FMOD_RESULT result; FMOD_SPEAKERMODE speakermode; int key; unsigned int version; /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } /* Choose the speaker mode selected by the Windows control panel. */ result = system->getDriverCaps(0, 0, 0, &speakermode); ERRCHECK(result); result = system->setSpeakerMode(speakermode); ERRCHECK(result); result = system->init(32, FMOD_INIT_NORMAL, 0); ERRCHECK(result); result = system->createSound("../media/drumloop.wav", FMOD_SOFTWARE | FMOD_2D, 0, &sound1); ERRCHECK(result); result = sound1->setMode(FMOD_LOOP_OFF); ERRCHECK(result); result = system->createSound("../media/stereo.ogg", FMOD_SOFTWARE | FMOD_2D, 0, &sound2); ERRCHECK(result); printf("==============================================================================\n"); printf("Multi Speaker Output Example. Copyright (c) Firelight Technologies 2004-2014.\n"); printf("==============================================================================\n"); printf("\n"); switch (speakermode) { case FMOD_SPEAKERMODE_MONO : { printf("Using control panel speaker mode : MONO.\n"); printf("\n"); printf("Note! This output mode is very limited in its capability.\n"); printf("Most functionality of this demo is only realized with at least FMOD_SPEAKERMODE_QUAD\n"); printf("and above.\n"); break; } case FMOD_SPEAKERMODE_STEREO : { printf("Using control panel speaker mode : STEREO.\n"); printf("\n"); printf("Note! This output mode is very limited in its capability.\n"); printf("Most functionality of this demo is only realized with FMOD_SPEAKERMODE_QUAD\n"); printf("and above.\n"); break; } case FMOD_SPEAKERMODE_QUAD : { printf("Using control panel speaker mode : QUAD.\n"); printf("Side left, side right, center and subwoofer mix will be disabled.\n"); break; } case FMOD_SPEAKERMODE_SURROUND : { printf("Using control panel speaker mode : SURROUND.\n"); printf("Side left, side right and subwoofer mix will be disabled.\n"); break; } case FMOD_SPEAKERMODE_5POINT1 : { printf("Using control panel speaker mode : 5.1 surround.\n"); printf("Side left and right mix will be disabled..\n"); break; } case FMOD_SPEAKERMODE_7POINT1 : { printf("Using control panel speaker mode : 7.1 surround.\n"); printf("Full capability.\n"); break; } }; printf("\n"); printf("Press '1' to play a mono sound on the FRONT LEFT speaker.\n"); printf("Press '2' to play a mono sound on the FRONT RIGHT speaker.\n"); if (speakermode >= FMOD_SPEAKERMODE_SURROUND) { printf("Press '3' to play a mono sound on the CENTER speaker.\n"); } else { printf("- CENTER Disabled\n"); } if (speakermode >= FMOD_SPEAKERMODE_QUAD) { printf("Press '4' to play a mono sound on the REAR LEFT speaker.\n"); printf("Press '5' to play a mono sound on the REAR RIGHT speaker.\n"); } else { printf("- REAR LEFT Disabled\n"); printf("- REAR RIGHT Disabled\n"); } if (speakermode >= FMOD_SPEAKERMODE_7POINT1) { printf("Press '6' to play a mono sound on the SIDE LEFT speaker.\n"); printf("Press '7' to play a mono sound on the SIDE RIGHT speaker.\n"); } else { printf("- SIDE LEFT Disabled\n"); printf("- SIDE RIGHT Disabled\n"); } printf("\n"); printf("Press '8' to play a stereo sound on the front speakers.\n"); printf("Press '9' to play a stereo sound on the front speakers but channel swapped.\n"); if (speakermode >= FMOD_SPEAKERMODE_SURROUND) { printf("Press '0' to play the right part of a stereo sound on the CENTER speaker.\n"); } printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (_kbhit()) { key = _getch(); switch (key) { case '1' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(1.0f, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '2' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 1.0f, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '3' : { if (speakermode >= FMOD_SPEAKERMODE_SURROUND) /* All formats that have a center speaker. */ { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 1.0f, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } break; } case '4' : { if (speakermode >= FMOD_SPEAKERMODE_QUAD) { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 1.0f, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } break; } case '5' : { if (speakermode >= FMOD_SPEAKERMODE_QUAD) { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 1.0f, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } break; } case '6' : { if (speakermode >= FMOD_SPEAKERMODE_7POINT1) { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 1.0f, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } break; } case '7' : { if (speakermode >= FMOD_SPEAKERMODE_7POINT1) { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 1.0f); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); } break; } case '8' : { float levels[2] = { 0, 1.0f }; result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* By default a stereo sound would play in all right and all left speakers, so this forces it to just the front. */ result = channel->setSpeakerMix(1.0f, 1.0f, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '9' : { result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* Clear out all speakers first. */ result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); /* Put the left channel of the sound in the right speaker. */ { float levels[2] = { 0, 1.0f }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_LEFT, levels, 2); ERRCHECK(result); } /* Put the right channel of the sound in the left speaker. */ { float levels[2] = { 1.0f, 0 }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_RIGHT, levels, 2); ERRCHECK(result); } result = channel->setPaused(false); ERRCHECK(result); break; } case '0' : { if (speakermode >= FMOD_SPEAKERMODE_SURROUND) /* All formats that have a center speaker. */ { result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* Clear out all speakers first. */ result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); /* Put the left channel of the sound in the right speaker. */ { float levels[2] = { 0, 1.0f }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_CENTER, levels, 2); ERRCHECK(result); } result = channel->setPaused(false); ERRCHECK(result); } break; } } } system->update(); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = false; bool paused = false; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }
int FMOD_Main() { FMOD::System *system; FMOD::Sound *sound1, *sound2, *sound3; FMOD::Channel *channel = 0; FMOD_RESULT result; unsigned int version; void *extradriverdata = 0; void *buff = 0; int length = 0; FMOD_CREATESOUNDEXINFO exinfo; Common_Init(&extradriverdata); /* Create a System object and initialize */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { Common_Fatal("FMOD lib version %08x doesn't match header version %08x", version, FMOD_VERSION); } result = system->init(32, FMOD_INIT_NORMAL, extradriverdata); ERRCHECK(result); Common_LoadFileMemory(Common_MediaPath("drumloop.wav"), &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY | FMOD_LOOP_OFF, &exinfo, &sound1); ERRCHECK(result); Common_UnloadFileMemory(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! Common_LoadFileMemory(Common_MediaPath("jaguar.wav"), &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_SOFTWARE | FMOD_OPENMEMORY, &exinfo, &sound2); ERRCHECK(result); Common_UnloadFileMemory(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! Common_LoadFileMemory(Common_MediaPath("swish.wav"), &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exinfo, &sound3); ERRCHECK(result); Common_UnloadFileMemory(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! /* Main loop */ do { Common_Update(); if (Common_BtnPress(BTN_ACTION1)) { result = system->playSound(sound1, 0, false, &channel); ERRCHECK(result); } if (Common_BtnPress(BTN_ACTION2)) { result = system->playSound(sound2, 0, false, &channel); ERRCHECK(result); } if (Common_BtnPress(BTN_ACTION3)) { result = system->playSound(sound3, 0, false, &channel); ERRCHECK(result); } result = system->update(); ERRCHECK(result); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = 0; bool paused = 0; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); Common_Draw("=================================================="); Common_Draw("Load From Memory Example."); Common_Draw("Copyright (c) Firelight Technologies 2004-2014."); Common_Draw("=================================================="); Common_Draw(""); Common_Draw("Press %s to play a mono sound (drumloop)", Common_BtnStr(BTN_ACTION1)); Common_Draw("Press %s to play a mono sound (jaguar)", Common_BtnStr(BTN_ACTION2)); Common_Draw("Press %s to play a stereo sound (swish)", Common_BtnStr(BTN_ACTION3)); Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT)); Common_Draw(""); Common_Draw("Time %02d:%02d:%02d/%02d:%02d:%02d : %s", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped"); Common_Draw("Channels Playing %2d", channelsplaying); } Common_Sleep(50); } while (!Common_BtnPress(BTN_QUIT)); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = sound3->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); Common_Close(); return 0; }
int main(int argc, char *argv[]) { FMOD::System *system; FMOD::Sound *fsb; FMOD::Channel *channel = 0; FMOD_RESULT result; int key, count, numsubsounds; unsigned int version; /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } result = system->init(32, FMOD_INIT_NORMAL, 0); ERRCHECK(result); result = system->createSound("../media/example.fsb", FMOD_DEFAULT, 0, &fsb); ERRCHECK(result); printf("===================================================================\n"); printf("FSB Example. Copyright (c) Firelight Technologies 2004-2011.\n"); printf("===================================================================\n"); printf("\n"); result = fsb->getNumSubSounds(&numsubsounds); ERRCHECK(result); for (count = 0; count < numsubsounds; count++) { FMOD::Sound *subsound; char name[256]; result = fsb->getSubSound(count, &subsound); ERRCHECK(result); result = subsound->getName(name, 256); ERRCHECK(result); printf("Press '%c' to play \"%s\"\n", '1' + count, name); } printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (_kbhit()) { key = _getch(); if (key >= '1' && key < '1' + numsubsounds) { FMOD::Sound *subsound; int index = key - '1'; fsb->getSubSound(index, &subsound); result = system->playSound(FMOD_CHANNEL_FREE, subsound, false, &channel); ERRCHECK(result); } } system->update(); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = 0; bool paused = 0; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = fsb->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }
int main(int argc, char *argv[]) { FMOD::System *system; FMOD::Sound *sound1, *sound2, *sound3; FMOD::Channel *channel = 0; FMOD_RESULT result; int key; unsigned int version; void *buff = 0; int length = 0; FMOD_CREATESOUNDEXINFO exinfo; /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } result = system->init(32, FMOD_INIT_NORMAL, 0); ERRCHECK(result); LoadFileIntoMemory("../media/drumloop.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exinfo, &sound1); ERRCHECK(result); result = sound1->setMode(FMOD_LOOP_OFF); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! LoadFileIntoMemory("../media/jaguar.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_SOFTWARE | FMOD_OPENMEMORY, &exinfo, &sound2); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! LoadFileIntoMemory("../media/swish.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = system->createSound((const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exinfo, &sound3); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! printf("==========================================================================\n"); printf("Load from memory example. Copyright (c) Firelight Technologies 2004-2014.\n"); printf("==========================================================================\n"); printf("\n"); printf("Press '1' to play a mono sound using hardware mixing\n"); printf("Press '2' to play a mono sound using software mixing\n"); printf("Press '3' to play a stereo sound using hardware mixing\n"); printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (_kbhit()) { key = _getch(); switch (key) { case '1' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, false, &channel); ERRCHECK(result); break; } case '2' : { result = system->playSound(FMOD_CHANNEL_FREE, sound2, false, &channel); ERRCHECK(result); break; } case '3' : { result = system->playSound(FMOD_CHANNEL_FREE, sound3, false, &channel); ERRCHECK(result); break; } } } system->update(); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = 0; bool paused = 0; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = sound3->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }
int main(int argc, char *argv[]) { FMOD::System *system = 0; FMOD::Sound *sound = 0; FMOD::Channel *channel = 0; FMOD_RESULT result; int count; bool playing = false; int key, numoutputplugins; unsigned int version; unsigned int handle; /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } /* Set the source directory for all of the FMOD plugins. */ #ifdef _WIN64 result = system->setPluginPath("../../api/plugins/64bit"); #else result = system->setPluginPath("../../api/plugins"); #endif ERRCHECK(result); /* Load up an extra plugin that is not normally used by FMOD. */ #ifdef _WIN64 result = system->loadPlugin("output_mp364.dll", 0, 0); #else result = system->loadPlugin("output_mp3.dll", 0, 0); #endif if (result == FMOD_ERR_FILE_NOTFOUND) { /* If it isn't in the same directory, try for the plugin directory. */ #ifdef _WIN64 result = system->loadPlugin("../plugin_dev/output_mp3/output_mp364.dll", 0, 0); #else result = system->loadPlugin("../plugin_dev/output_mp3/output_mp3.dll", 0, 0); #endif ERRCHECK(result); } /* Display plugins */ { int num; char name[256]; printf("Codec plugins\n"); printf("--------------\n"); result = system->getNumPlugins(FMOD_PLUGINTYPE_CODEC, &num); ERRCHECK(result); for (count = 0; count < num; count++) { result = system->getPluginHandle(FMOD_PLUGINTYPE_CODEC, count, &handle); ERRCHECK(result); result = system->getPluginInfo(handle, 0, name, 256, 0); ERRCHECK(result); printf("%2d - %-30s", count + 1, name); if (count % 2) { printf("\n"); } } printf("\n"); if (count % 2) { printf("\n"); } printf("DSP plugins\n"); printf("--------------\n"); result = system->getNumPlugins(FMOD_PLUGINTYPE_DSP, &num); ERRCHECK(result); for (count = 0; count < num; count++) { result = system->getPluginHandle(FMOD_PLUGINTYPE_DSP, count, &handle); ERRCHECK(result); result = system->getPluginInfo(handle, 0, name, 256, 0); ERRCHECK(result); printf("%2d - %-30s", count + 1, name); if (count % 2) { printf("\n"); } } printf("\n"); if (count % 2) { printf("\n"); } printf("Output plugins\n"); printf("--------------\n"); result = system->getNumPlugins(FMOD_PLUGINTYPE_OUTPUT, &numoutputplugins); ERRCHECK(result); for (count = 0; count < numoutputplugins; count++) { result = system->getPluginHandle(FMOD_PLUGINTYPE_OUTPUT, count, &handle); ERRCHECK(result); result = system->getPluginInfo(handle, 0, name, 256, 0); ERRCHECK(result); printf("%2d - %-30s", count + 1, name); if (count % 2) { printf("\n"); } } if (count % 2) { printf("\n"); } } /* System initialization */ printf("-----------------------------------------------------------------------\n"); // print driver names printf("Press a corresponding number for an OUTPUT PLUGIN to use or ESC to quit\n"); do { key = _getch(); } while (key != 27 && key < '1' && key > '0' + numoutputplugins); if (key == 27) { return 0; } result = system->getPluginHandle(FMOD_PLUGINTYPE_OUTPUT, key - '1', &handle); ERRCHECK(result); result = system->setOutputByPlugin(handle); ERRCHECK(result); int drivers; result = system->getNumDrivers(&drivers); ERRCHECK(result); result = system->init(32, FMOD_INIT_NORMAL, 0); ERRCHECK(result); result = system->createSound("../media/wave.mp3", FMOD_SOFTWARE | FMOD_CREATESTREAM, 0, &sound); ERRCHECK(result); printf("Press a key to play sound to output device.\n"); result = system->playSound(FMOD_CHANNEL_FREE, sound, 0, &channel); ERRCHECK(result); /* Main loop. */ do { unsigned int ms = 0; unsigned int lenms = 0; bool paused = false; int channelsplaying = 0; FMOD::Sound *currentsound = 0; system->update(); playing = false; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } system->getChannelsPlaying(&channelsplaying); printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); Sleep(5); if (_kbhit()) { key = _getch(); if (key == 27) { break; } } } while (playing); printf("\n"); /* Shut down */ result = sound->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }
int main(int argc, char *argv[]) { FMOD::System *system; FMOD::Sound *sound1, *sound2; FMOD::Channel *channel = 0; FMOD_RESULT result; int key; unsigned int version; /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); getch(); return 0; } /* Multichannel only supported in ALSA mode in 5.1 and 7.1. If the user doesn't have 5.1 speakers then only the speakers they have will be audible. */ result = system->setOutput(FMOD_OUTPUTTYPE_ALSA); ERRCHECK(result); result = system->setSpeakerMode(FMOD_SPEAKERMODE_5POINT1); ERRCHECK(result); result = system->init(32, FMOD_INIT_NORMAL, 0); ERRCHECK(result); result = system->createSound("../media/drumloop.wav", FMOD_SOFTWARE | FMOD_2D, 0, &sound1); ERRCHECK(result); result = sound1->setMode(FMOD_LOOP_OFF); ERRCHECK(result); result = system->createSound("../media/stereo.ogg", FMOD_SOFTWARE | FMOD_2D, 0, &sound2); ERRCHECK(result); printf("==============================================================================\n"); printf("Multi Speaker Output Example. Copyright (c) Firelight Technologies 2004-2011.\n"); printf("==============================================================================\n"); printf("\n"); printf("Note! You must have your speaker configuration set up correctly\n"); printf(" in the windows control panel for this to work properly.\n"); printf("\n"); printf("Press '1' to play a mono sound on the FRONT LEFT speaker.\n"); printf("Press '2' to play a mono sound on the FRONT RIGHT speaker.\n"); printf("Press '3' to play a mono sound on the CENTER speaker.\n"); printf("Press '4' to play a mono sound on the REAR LEFT speaker.\n"); printf("Press '5' to play a mono sound on the REAR RIGHT speaker.\n"); printf("Press '6' to play a mono sound on the SIDE LEFT speaker.\n"); printf("Press '7' to play a mono sound on the SIDE RIGHT speaker.\n"); printf("Press '8' to play a stereo sound on the front speakers.\n"); printf("Press '9' to play a stereo sound on the front speakers but channel swapped.\n"); printf("Press '0' to play the right part of a stereo sound on the CENTER speaker.\n"); printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (kbhit()) { key = getch(); switch (key) { case '1' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(1.0f, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '2' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 1.0f, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '3' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 1.0f, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '4' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 1.0f, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '5' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 1.0f, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '6' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 1.0f, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '7' : { result = system->playSound(FMOD_CHANNEL_FREE, sound1, true, &channel); ERRCHECK(result); result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 1.0f); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '8' : { float levels[2] = { 0, 1.0f }; result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* By default a stereo sound would play in all right and all left speakers, so this forces it to just the front. */ result = channel->setSpeakerMix(1.0f, 1.0f, 0, 0, 0, 0, 0, 0); ERRCHECK(result); result = channel->setPaused(false); ERRCHECK(result); break; } case '9' : { result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* Clear out all speakers first. */ result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); /* Put the left channel of the sound in the right speaker. */ { float levels[2] = { 0, 1.0f }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_LEFT, levels, 2); ERRCHECK(result); } /* Put the right channel of the sound in the left speaker. */ { float levels[2] = { 1.0f, 0 }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_RIGHT, levels, 2); ERRCHECK(result); } result = channel->setPaused(false); ERRCHECK(result); break; } case '0' : { result = system->playSound(FMOD_CHANNEL_FREE, sound2, true, &channel); ERRCHECK(result); /* Clear out all speakers first. */ result = channel->setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 0); ERRCHECK(result); /* Put the left channel of the sound in the right speaker. */ { float levels[2] = { 0, 1.0f }; /* This array represents the source stereo sound. l/r */ result = channel->setSpeakerLevels(FMOD_SPEAKER_FRONT_CENTER, levels, 2); ERRCHECK(result); } result = channel->setPaused(false); ERRCHECK(result); break; } } } system->update(); { unsigned int ms = 0; unsigned int lenms = 0; bool playing = false; bool paused = false; int channelsplaying = 0; if (channel) { FMOD::Sound *currentsound = 0; result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPaused(&paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } channel->getCurrentSound(¤tsound); if (currentsound) { result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } system->getChannelsPlaying(&channelsplaying); printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = sound1->release(); ERRCHECK(result); result = sound2->release(); ERRCHECK(result); result = system->close(); ERRCHECK(result); result = system->release(); ERRCHECK(result); return 0; }