added the readme
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
/*==============================================================================
|
||||
Channel Groups Example
|
||||
Copyright (c), Firelight Technologies Pty, Ltd 2004-2026.
|
||||
|
||||
This example shows how to put channels into channel groups, so that you can
|
||||
affect a group of channels at a time instead of just one.
|
||||
|
||||
For information on using FMOD example code in your own programs, visit
|
||||
https://www.fmod.com/legal
|
||||
==============================================================================*/
|
||||
#include "fmod.hpp"
|
||||
#include "common.h"
|
||||
|
||||
int FMOD_Main()
|
||||
{
|
||||
FMOD::System *system;
|
||||
FMOD::Sound *sound[6];
|
||||
FMOD::Channel *channel[6];
|
||||
FMOD::ChannelGroup *groupA, *groupB, *masterGroup;
|
||||
FMOD_RESULT result;
|
||||
int count;
|
||||
void *extradriverdata = 0;
|
||||
|
||||
Common_Init(&extradriverdata);
|
||||
|
||||
/*
|
||||
Create a System object and initialize.
|
||||
*/
|
||||
result = FMOD::System_Create(&system);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->init(32, FMOD_INIT_NORMAL, extradriverdata);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->createSound(Common_MediaPath("drumloop.wav"), FMOD_LOOP_NORMAL, 0, &sound[0]);
|
||||
ERRCHECK(result);
|
||||
result = system->createSound(Common_MediaPath("jaguar.wav"), FMOD_LOOP_NORMAL, 0, &sound[1]);
|
||||
ERRCHECK(result);
|
||||
result = system->createSound(Common_MediaPath("swish.wav"), FMOD_LOOP_NORMAL, 0, &sound[2]);
|
||||
ERRCHECK(result);
|
||||
result = system->createSound(Common_MediaPath("c.ogg"), FMOD_LOOP_NORMAL, 0, &sound[3]);
|
||||
ERRCHECK(result);
|
||||
result = system->createSound(Common_MediaPath("d.ogg"), FMOD_LOOP_NORMAL, 0, &sound[4]);
|
||||
ERRCHECK(result);
|
||||
result = system->createSound(Common_MediaPath("e.ogg"), FMOD_LOOP_NORMAL, 0, &sound[5]);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->createChannelGroup("Group A", &groupA);
|
||||
ERRCHECK(result);
|
||||
result = system->createChannelGroup("Group B", &groupB);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->getMasterChannelGroup(&masterGroup);
|
||||
ERRCHECK(result);
|
||||
|
||||
/*
|
||||
Instead of being independent, set the group A and B to be children of the master group.
|
||||
*/
|
||||
result = masterGroup->addGroup(groupA);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = masterGroup->addGroup(groupB);
|
||||
ERRCHECK(result);
|
||||
|
||||
/*
|
||||
Start all the sounds.
|
||||
*/
|
||||
for (count = 0; count < 6; count++)
|
||||
{
|
||||
result = system->playSound(sound[count], 0, true, &channel[count]);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = channel[count]->setChannelGroup((count < 3) ? groupA : groupB);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = channel[count]->setPaused(false);
|
||||
ERRCHECK(result);
|
||||
}
|
||||
|
||||
/*
|
||||
Change the volume of each group, just because we can! (reduce overall noise).
|
||||
*/
|
||||
result = groupA->setVolume(0.5f);
|
||||
ERRCHECK(result);
|
||||
result = groupB->setVolume(0.5f);
|
||||
ERRCHECK(result);
|
||||
|
||||
/*
|
||||
Main loop.
|
||||
*/
|
||||
do
|
||||
{
|
||||
Common_Update();
|
||||
|
||||
if (Common_BtnPress(BTN_ACTION1))
|
||||
{
|
||||
bool mute = true;
|
||||
groupA->getMute(&mute);
|
||||
groupA->setMute(!mute);
|
||||
}
|
||||
|
||||
if (Common_BtnPress(BTN_ACTION2))
|
||||
{
|
||||
bool mute = true;
|
||||
groupB->getMute(&mute);
|
||||
groupB->setMute(!mute);
|
||||
}
|
||||
|
||||
if (Common_BtnPress(BTN_ACTION3))
|
||||
{
|
||||
bool mute = true;
|
||||
masterGroup->getMute(&mute);
|
||||
masterGroup->setMute(!mute);
|
||||
}
|
||||
|
||||
result = system->update();
|
||||
ERRCHECK(result);
|
||||
|
||||
{
|
||||
int channelsplaying = 0;
|
||||
|
||||
result = system->getChannelsPlaying(&channelsplaying, NULL);
|
||||
ERRCHECK(result);
|
||||
|
||||
Common_Draw("==================================================");
|
||||
Common_Draw("Channel Groups Example.");
|
||||
Common_Draw("Copyright (c) Firelight Technologies 2004-2026.");
|
||||
Common_Draw("==================================================");
|
||||
Common_Draw("");
|
||||
Common_Draw("Group A : drumloop.wav, jaguar.wav, swish.wav");
|
||||
Common_Draw("Group B : c.ogg, d.ogg, e.ogg");
|
||||
Common_Draw("");
|
||||
Common_Draw("Press %s to mute/unmute group A", Common_BtnStr(BTN_ACTION1));
|
||||
Common_Draw("Press %s to mute/unmute group B", Common_BtnStr(BTN_ACTION2));
|
||||
Common_Draw("Press %s to mute/unmute master group", Common_BtnStr(BTN_ACTION3));
|
||||
Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT));
|
||||
Common_Draw("");
|
||||
Common_Draw("Channels playing %d", channelsplaying);
|
||||
}
|
||||
|
||||
Common_Sleep(50);
|
||||
} while (!Common_BtnPress(BTN_QUIT));
|
||||
|
||||
|
||||
/*
|
||||
A little fade out over 2 seconds.
|
||||
*/
|
||||
{
|
||||
float pitch = 1.0f;
|
||||
float vol = 1.0f;
|
||||
|
||||
for (count = 0; count < 200; count++)
|
||||
{
|
||||
masterGroup->setPitch(pitch);
|
||||
masterGroup->setVolume(vol);
|
||||
|
||||
vol -= (1.0f / 200.0f);
|
||||
pitch -= (0.5f / 200.0f);
|
||||
|
||||
result = system->update();
|
||||
ERRCHECK(result);
|
||||
|
||||
Common_Sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Shut down.
|
||||
*/
|
||||
for (count = 0; count < 6; count++)
|
||||
{
|
||||
result = sound[count]->release();
|
||||
ERRCHECK(result);
|
||||
}
|
||||
|
||||
result = groupA->release();
|
||||
ERRCHECK(result);
|
||||
result = groupB->release();
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->close();
|
||||
ERRCHECK(result);
|
||||
result = system->release();
|
||||
ERRCHECK(result);
|
||||
|
||||
Common_Close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user