unsigned long ChannelStream::GetTotalPlayTime()
 {
     if (!IsPlaying()) {
         if (this->pausePos)
             return (this->pausePos-this->playStart) + this->playOffset;
         else
             return 0;
     }
     
     return GetOutputTime();
 }
int WaveOut::NextBuffer()
{
	int b = _wrpos;
	printf("Buffers: %5d time: %d\r",_pending,GetOutputTime()/1000);
	if (_buffers[_wrpos] == 0 || (_buffers[_wrpos]->dwFlags & WHDR_DONE))
	{
		if (_buffers[_wrpos])
		{
			waveOutUnprepareHeader(_device,_buffers[_wrpos],sizeof(*_buffers[_wrpos]));
			free(_buffers[_wrpos]->lpData);
			_played += _buffers[_wrpos]->dwBufferLength;
			delete _buffers[_wrpos];
			_buffers[_wrpos] = 0;
			_pending--;
		}
		_wrpos++;
		if (_wrpos>= MAXBUFFERS) _wrpos = 0;
		return b;
	}
	return -1;
}