if ((*it) == sound)
{
m_sounds.erase(it);
+ delete sound;
return;
}
}
CSampleBuffer *buffer;
if (!(*it)->m_drain)
{
- while (time < MAX_CACHE_LEVEL && !(*it)->m_inputBuffers->m_freeSamples.empty())
+ float buftime = (float)(*it)->m_inputBuffers->m_format.m_frames / (*it)->m_inputBuffers->m_format.m_sampleRate;
+ time += buftime * (*it)->m_processingSamples.size();
+ while ((time < MAX_CACHE_LEVEL || (*it)->m_streamIsBuffering) && !(*it)->m_inputBuffers->m_freeSamples.empty())
{
buffer = (*it)->m_inputBuffers->GetFreeBuffer();
(*it)->m_processingSamples.push_back(buffer);
(*it)->m_streamPort->SendInMessage(CActiveAEDataProtocol::STREAMBUFFER, &buffer, sizeof(CSampleBuffer*));
(*it)->IncFreeBuffers();
- time += (float)buffer->pkt->max_nb_samples / buffer->pkt->config.sample_rate;
+ time += buftime;
}
}
else
if ((*it)->m_fadingSamples == -1)
{
(*it)->m_fadingSamples = m_internalFormat.m_sampleRate * (float)(*it)->m_fadingTime / 1000.0f;
- (*it)->m_volume = (*it)->m_fadingBase;
+ if ((*it)->m_fadingSamples > 0)
+ (*it)->m_volume = (*it)->m_fadingBase;
+ else
+ {
+ (*it)->m_volume = (*it)->m_fadingTarget;
+ CSingleLock lock((*it)->m_streamLock);
+ (*it)->m_streamFading = false;
+ }
}
if ((*it)->m_fadingSamples > 0)
{