00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef OPENALOUTPUTMODULE_H
00034 #define OPENALOUTPUTMODULE_H
00035
00036 #include "syn/Stream/OpenALAudioContext.h"
00037 #include "syn/Stream/OpenALAudioOStream.h"
00038 #include "syn/Core/SampleBufferQueue.h"
00039 #include "syn/Core/SampleBufferQueuePtr.h"
00040 #include "syn/Core/Module.h"
00041
00042 namespace syn
00043 {
00049 class OpenALOutputModule : public Module
00050 {
00051 public:
00052 OpenALOutputModule();
00053 virtual ~OpenALOutputModule() {};
00054 virtual void update();
00055
00056 virtual bool open();
00057 virtual bool isOpen() { return mWavStream.isOpen(); }
00058 void close();
00059
00060
00061
00062
00063 void setOutputBufferSize( unsigned int size )
00064 {
00065 mBufSize = size;
00066 mTempBuf.resize( mBufSize );
00067 mTempBufIt = 0;
00068 }
00069
00071 virtual Module* clone() const
00072 {
00073 OpenALOutputModule* mod = new OpenALOutputModule;
00074 mod->setOutputBufferSize( mBufSize );
00075 return mod;
00076 }
00077
00081 virtual void getParam( const std::string& key, MultivariateType& value )
00082 {
00083 if (key == "bufsize")
00084 value.setValue<unsigned int>( mBufSize );
00085 }
00086
00088 virtual void setParam( const std::string& key, const MultivariateType& value )
00089 {
00090 if (key == "bufsize")
00091 this->setOutputBufferSize( value.getValue<unsigned int>() );
00092 }
00094 private:
00095 void writeSomeSilence();
00096
00097 TerminalPtr mAmplitudeControlInput;
00098 TerminalPtr mMonoAudioInput;
00099
00100 OpenALAudioOStream mWavStream;
00101
00102 static OpenALAudioContext ctx;
00103 static bool mCtxInit;
00104
00105 SampleBuffer1ss mTempBuf;
00106 unsigned int mTempBufIt;
00107
00108
00109 SampleBuffer1f* mReadBuf;
00110 unsigned int mReadBufIt;
00111
00112
00113
00114 AudioFormat mOutputFmt;
00115 unsigned int mBufSize;
00116
00117
00121
00122
00124
00125 };
00126 }
00127
00128 #endif //OPENALOUTPUTMODULE_H