00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00026
00028 #include <SFML/Audio/AudioDevice.hpp>
00029 #include <SFML/Audio/AudioResource.hpp>
00030 #include <algorithm>
00031 #include <iostream>
00032
00033
00034 namespace sf_private
00035 {
00039 sfAudioDevice::sfAudioDevice()
00040 {
00041
00042 myDevice = alcOpenDevice(NULL);
00043
00044 if (myDevice)
00045 {
00046
00047 myContext = alcCreateContext(myDevice, NULL);
00048
00049 if (myContext)
00050 {
00051
00052 alcMakeContextCurrent(myContext);
00053
00054
00055 float ListenerPos[] = {0.f, 0.f, 0.f};
00056 float ListenerVel[] = {0.f, 0.f, 0.f};
00057 float ListenerOri[] = {0.f, 0.f, 1.f, 0.f, 1.f, 0.f};
00058 sfALCheck(alListenerfv(AL_POSITION, ListenerPos));
00059 sfALCheck(alListenerfv(AL_VELOCITY, ListenerVel));
00060 sfALCheck(alListenerfv(AL_ORIENTATION, ListenerOri));
00061 }
00062 else
00063 {
00064 std::cerr << "Failed to create audio context" << std::endl;
00065 }
00066 }
00067 else
00068 {
00069 std::cerr << "Failed to open audio device" << std::endl;
00070 }
00071 }
00072
00073
00077 sfAudioDevice::~sfAudioDevice()
00078 {
00079
00080 std::for_each(myResources.begin(), myResources.end(), std::mem_fun(&sfAudioResource::DestroyAudioResources));
00081
00082
00083 alcMakeContextCurrent(NULL);
00084 if (myContext)
00085 alcDestroyContext(myContext);
00086
00087
00088 if (myDevice)
00089 alcCloseDevice(myDevice);
00090 }
00091
00092
00096 sfAudioDevice& sfAudioDevice::GetInstance()
00097 {
00098 static sfAudioDevice Instance;
00099
00100 return Instance;
00101 }
00102
00103
00107 void sfAudioDevice::AddAudioResource(sfAudioResource* Resource)
00108 {
00109 if (Resource)
00110 myResources.insert(Resource);
00111 }
00112
00113
00117 void sfAudioDevice::RemoveAudioResource(sfAudioResource* Resource)
00118 {
00119 myResources.erase(Resource);
00120 }
00121
00122
00126 ALCdevice* sfAudioDevice::GetDevice() const
00127 {
00128 return myDevice;
00129 }
00130
00131 }