diff --git a/libs/portaudio/Makefile.am b/libs/portaudio/Makefile.am index d6ef1faf280ffb6949845a33cab7055a26dffe66..a147f6b83f1691c06f495e28a45f11b06dd23bcf 100644 --- a/libs/portaudio/Makefile.am +++ b/libs/portaudio/Makefile.am @@ -1,5 +1,5 @@ noinst_LTLIBRARIES = libportaudio.la -libportaudio_la_CFLAGS = $(PORTAUDIO_CFLAGS) -Ipa_common/ +libportaudio_la_CFLAGS = $(PORTAUDIO_CFLAGS) -Ipa_common/ libportaudio_la_LIBADD = $(PORTAUDIO_LIBS) libportaudio_la_CXXFLAGS = $(PORTAUDIO_CXXFLAGS) libportaudio_la_CPPFLAGS = $(PORTAUDIO_CPPFLAGS) diff --git a/src/audio/OpenAL/Makefile.am b/src/audio/OpenAL/Makefile.am index bdd8d3d9aebbc959b50ca88666b35720c73e1e2e..cdafe1c688a3b796c18f61dff49a75bfa9cbafda 100644 --- a/src/audio/OpenAL/Makefile.am +++ b/src/audio/OpenAL/Makefile.am @@ -17,12 +17,12 @@ libsflaudio_la_SOURCES = \ SFLAudio.hpp \ Source.hpp -AM_CPPFLAGS = $(PORTAUDIO_CFLAGS) -I../pacpp/include -I$(top_srcdir)/libs/portaudio/pa_common -I$(top_srcdir)/libs/ +AM_CPPFLAGS = $(PORTAUDIO_CFLAGS) -I$(top_srcdir)/libs/portaudio/pa_common -I$(top_srcdir)/libs/ AM_CXXFLAGS = $(PORTAUDIO_CXXFLAGS) -I$(top_srcdir)/libs/ AM_LDFLAGS = -L$(top_srcdir)/libs/portaudio/ LIBADD = $(PORTAUDIO_LIBS) -lportaudio -lopenal -LDADD = libsflaudio.la $(PORTAUDIO_LIBS) -lopenal ../pacpp/source/portaudiocpp/libportaudiocpp.la -lportaudio +LDADD = libsflaudio.la $(PORTAUDIO_LIBS) -lopenal -lportaudio example01_SOURCES = example01.cpp diff --git a/src/audio/OpenAL/OpenALDevice.hpp b/src/audio/OpenAL/OpenALDevice.hpp index 33693d421f8374f0971e1c5a1f63d97385a2f779..1e9d1321baea95bba1b63520675ae75e8956951c 100644 --- a/src/audio/OpenAL/OpenALDevice.hpp +++ b/src/audio/OpenAL/OpenALDevice.hpp @@ -30,6 +30,7 @@ namespace SFLAudio { public: OpenALDevice(); + ~OpenALDevice(); virtual bool load(); virtual void unload(); virtual Context *createContext(); diff --git a/src/audio/OpenAL/PortAudioLayer.cpp b/src/audio/OpenAL/PortAudioLayer.cpp index 4fdf2d7db251fb4588211f1d76e0426b04303491..67d23915f007b0f6d3bc942b9f6b5eef9ef06ab6 100644 --- a/src/audio/OpenAL/PortAudioLayer.cpp +++ b/src/audio/OpenAL/PortAudioLayer.cpp @@ -19,9 +19,7 @@ */ #include "PortAudioLayer.hpp" -#include "portaudiocpp/Device.hxx" -#include "portaudiocpp/HostApi.hxx" -#include "portaudiocpp/System.hxx" +#include "portaudio.h" #include "NullDevice.hpp" @@ -29,30 +27,54 @@ SFLAudio::PortAudioLayer::PortAudioLayer() : AudioLayer("portaudio") { - portaudio::System::initialize(); + Pa_Initialize(); } SFLAudio::PortAudioLayer::~PortAudioLayer() { - portaudio::System::terminate(); + Pa_Terminate(); } + + std::list< std::string > SFLAudio::PortAudioLayer::getDevicesNames() { - std::list< std::string > devices; - for(int index = 0; index < portaudio::System::instance().deviceCount(); index++ ) { - portaudio::Device &device = portaudio::System::instance().deviceByIndex(index); + refreshDevices(); - std::string name(device.hostApi().name()); - name += ": "; - name += device.name(); - devices.push_back(name); + std::list< std::string > devices; + for(DevicesType::iterator pos = mDevices.begin(); + pos != mDevices.end(); + pos++) { + devices.push_back(pos->first); } return devices; } + +void +SFLAudio::PortAudioLayer::refreshDevices() +{ + mDevices.clear(); + for(int index = 0; index < Pa_GetDeviceCount(); index++ ) { + const PaDeviceInfo *device = NULL; + const PaHostApiInfo *host = NULL; + + device = Pa_GetDeviceInfo(index); + if(device != NULL) { + host = Pa_GetHostApiInfo(device->hostApi); + } + + if(device != NULL && host != NULL) { + std::string name(host->name); + name += ": "; + name += device->name; + mDevices.insert(std::make_pair(name, index)); + } + } +} + SFLAudio::Device * SFLAudio::PortAudioLayer::openDevice() { diff --git a/src/audio/OpenAL/PortAudioLayer.hpp b/src/audio/OpenAL/PortAudioLayer.hpp index 31eac5a03771ba37707ef37875156fdcc6212707..ca5aafedf3de6b0cd9f794545dbc5c764db0b21f 100644 --- a/src/audio/OpenAL/PortAudioLayer.hpp +++ b/src/audio/OpenAL/PortAudioLayer.hpp @@ -38,7 +38,11 @@ namespace SFLAudio virtual Device *openDevice(const std::string &name); private: - std::map< std::string, std::pair< int, int > > mDevices; + virtual void refreshDevices(); + + private: + typedef std::map< std::string, int > DevicesType; + DevicesType mDevices; }; }