Update the OpenAL Soft download
[alure.git] / examples / alure-play.cpp
blobc6bdd6d7d572d4a89ccf3c912e7152547e73ec1a
1 /*
2 * A simple example showing how to load and play a sound.
3 */
5 #include <string.h>
7 #include <iostream>
8 #include <iomanip>
9 #include <thread>
10 #include <chrono>
12 #include "alure2.h"
14 int main(int argc, char *argv[])
16 alure::ArrayView<const char*> args(argv, argc);
18 if(args.size() < 2)
20 std::cerr<< "Usage: "<<args.front()<<" [-device \"device name\"] files..." <<std::endl;
21 return 1;
23 args = args.slice(1);
25 alure::DeviceManager devMgr = alure::DeviceManager::getInstance();
27 alure::Device dev;
28 if(args.size() > 2 && args[0] == alure::StringView("-device"))
30 dev = devMgr.openPlayback(args[1], std::nothrow);
31 if(!dev) std::cerr<< "Failed to open \""<<args[1]<<"\" - trying default" <<std::endl;
32 args = args.slice(2);
34 if(!dev) dev = devMgr.openPlayback();
35 std::cout<< "Opened \""<<dev.getName()<<"\"" <<std::endl;
37 alure::Context ctx = dev.createContext();
38 alure::Context::MakeCurrent(ctx);
40 for(;!args.empty();args = args.slice(1))
42 alure::Buffer buffer = ctx.getBuffer(args.front());
43 alure::Source source = ctx.createSource();
44 source.play(buffer);
45 std::cout<< "Playing "<<args.front()<<" ("
46 << alure::GetSampleTypeName(buffer.getSampleType())<<", "
47 << alure::GetChannelConfigName(buffer.getChannelConfig())<<", "
48 << buffer.getFrequency()<<"hz)" <<std::endl;
50 while(source.isPlaying())
52 std::cout<< "\r "<<source.getSampleOffset()<<" / "<<buffer.getLength() <<std::flush;
53 std::this_thread::sleep_for(std::chrono::milliseconds(25));
54 ctx.update();
56 std::cout<<std::endl;
58 source.destroy();
59 ctx.removeBuffer(buffer);
62 alure::Context::MakeCurrent(nullptr);
63 ctx.destroy();
64 dev.close();
66 return 0;