+ if (!mStreamTimer.isValid())
+ {
+ mStreamTimer.init(boost::bind(&Impl::streamUpdate, this, _1, _2),
+ 1.0, Timer::REPEAT);
+ }
+
+ alSourcePlay(mSource);
+ mIsPlaying = true;
+ }
+
+ void bufferStream()
+ {
+ ALuint buffer;
+ for (int i = mBuffers.size(); i <= 8; ++i)
+ {
+ alGenBuffers(1, &buffer);
+
+ if (mQueue.front()->stream(buffer))
+ {
+ alSourceQueueBuffers(mSource, 1, &buffer);
+ mBuffers.push_back(buffer);
+ }
+ else
+ {
+ alDeleteBuffers(1, &buffer);
+ break;
+ }
+ }