Init comit
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
/*===============================================================================================
|
||||
PlaySound Example
|
||||
Copyright (c), Firelight Technologies Pty, Ltd 2004-2016.
|
||||
|
||||
This example shows how to simply load and play multiple sounds. This is about the simplest
|
||||
use of FMOD.
|
||||
This makes FMOD decode the into memory when it loads. If the sounds are big and possibly take
|
||||
up a lot of ram, then it would be better to use the FMOD_CREATESTREAM flag so that it is
|
||||
streamed in realtime as it plays.
|
||||
===============================================================================================*/
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include "../../api/inc/fmod.hpp"
|
||||
#include "../../api/inc/fmod_errors.h"
|
||||
|
||||
void ERRCHECK(FMOD_RESULT result)
|
||||
{
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
|
||||
/*
|
||||
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/drumloop.wav", FMOD_HARDWARE, 0, &sound1);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = sound1->setMode(FMOD_LOOP_OFF); /* drumloop.wav has embedded loop points which automatically makes looping turn on, */
|
||||
ERRCHECK(result); /* so turn it off here. We could have also just put FMOD_LOOP_OFF in the above CreateSound call. */
|
||||
|
||||
result = system->createSound("../media/jaguar.wav", FMOD_SOFTWARE, 0, &sound2);
|
||||
ERRCHECK(result);
|
||||
|
||||
result = system->createSound("../media/swish.wav", FMOD_HARDWARE, 0, &sound3);
|
||||
ERRCHECK(result);
|
||||
|
||||
printf("===================================================================\n");
|
||||
printf("PlaySound Example. Copyright (c) Firelight Technologies 2004-2016.\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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user