-/* $Id$
-
-This file is part of libmspal
-Copyright © 2008-2009 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#include "buffer.h"
-#include "sound.h"
+#include "sounddecoder.h"
#include "streamer.h"
using namespace std;
Streamer::Streamer(Source &s):
src(s),
- snd(0)
+ decoder(0)
{ }
Streamer::~Streamer()
delete *i;
}
-void Streamer::play(Sound &s)
+void Streamer::play(SoundDecoder &s)
{
- snd=&s;
+ decoder = &s;
tick();
src.play();
}
void Streamer::stop()
{
- snd=0;
+ decoder = 0;
src.stop();
}
void Streamer::tick()
{
- if(unsigned n=src.get_buffers_processed())
+ if(unsigned n = src.get_buffers_processed())
{
for(unsigned i=0; i<n; ++i)
{
}
}
- if(!snd)
+ if(!decoder)
return;
if(src.get_state()!=PLAYING && src.get_state()!=PAUSED)
src.play();
- unsigned freq=snd->get_frequency();
- unsigned chunk_size=freq&~0xF;
- unsigned queued=src.get_buffers_queued();
+ unsigned freq = decoder->get_frequency();
+ unsigned chunk_size = freq&~0xF;
+ unsigned queued = src.get_buffers_queued();
+ vector<char> data(chunk_size);
for(unsigned i=queued; i<4; ++i)
{
- char data[chunk_size];
- unsigned pos=0;
+ unsigned pos = 0;
while(pos<chunk_size)
{
- unsigned len=snd->read(data+pos, chunk_size-pos);
+ unsigned len = decoder->read(&data[0]+pos, chunk_size-pos);
if(len==0)
break;
- pos+=len;
+ pos += len;
}
if(pos)
{
- Buffer *buf=new Buffer;
- buf->data(snd->get_format(), data, pos, freq);
+ Buffer *buf = new Buffer;
+ buf->data(decoder->get_format(), &data[0], pos, freq);
src.queue_buffer(*buf);
buffers.push_back(buf);
}
}
- if(snd->eof())
- snd=0;
+ if(decoder->eof())
+ decoder = 0;
}
} // namespace AL