1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-10 06:39:49 +00:00
OpenMW/apps/soundtest/main.cpp
2010-08-13 22:30:22 +02:00

66 lines
1.5 KiB
C++

#include <iostream>
#include <mangle/stream/servers/file_stream.hpp>
#include <mangle/sound/sources/stream_source.hpp>
#include <mangle/stream/filters/buffer_stream.hpp>
using namespace std;
using namespace Mangle::Stream;
using namespace Mangle::Sound;
#ifdef OPENMW_USE_AUDIERE
#include <mangle/sound/filters/openal_audiere.hpp>
AudiereLoader loader;
#endif
#ifdef OPENMW_USE_FFMPEG
#include <mangle/sound/filters/openal_ffmpeg.hpp>
FFMpegLoader loader;
#endif
#ifdef OPENMW_USE_MPG123
#include <mangle/sound/filters/openal_mpg123.hpp>
Mpg123Loader loader;
#endif
OpenAL_Factory openal;
void play(const char* name)
{
try
{
cout << "Opening " << name << "\n";
SampleSourcePtr samples = loader.load(name);
cout << "Loading entire file into memory\n";
StreamPtr buf(new BufferStream(samples));
// Recreate the stream as a sample source (we're only doing it
// this complicated to test each step individually)
int a,b,c;
samples->getInfo(&a,&b,&c);
samples.reset(new Stream2Samples(buf, a,b,c));
cout << "Creating OpenAL sound from data\n";
SoundPtr snd = openal.loadRaw(samples);
cout << "Playing (abort with Ctrl-C)\n";
snd->play();
while(snd->isPlaying())
usleep(10000);
cout << "Done playing\n";
}
catch(exception &e)
{
cout << " ERROR: " << e.what() << "\n";
}
}
int main(int argc, char** argv)
{
if(argc==1)
cout << "Specify sound file (wav, mp3, ogg) on command line.\n";
for(int i=1; i<argc; i++)
play(argv[i]);
return 0;
}