4 #include "resourcesoundsampleprovider.h"
12 namespace swift::sound::sample_provider
14 CResourceSoundSampleProvider::CResourceSoundSampleProvider(
const CResourceSound &resourceSound, QObject *parent)
18 this->setObjectName(on);
19 m_tempBuffer.resize(m_tempBufferSize);
24 if (!m_resourceSound.
isLoaded()) {
return 0; }
25 if (count > m_tempBufferSize)
27 qDebug() <<
"Count too large for temp buffer" << count;
30 const qint64 availableSamples = m_resourceSound.
audioData().size() - m_position;
31 const qint64 samplesToCopy = qMin(availableSamples, count);
33 samples.fill(0,
static_cast<int>(samplesToCopy));
35 for (
int i = 0; i < samplesToCopy; i++)
37 m_tempBuffer[i] = m_resourceSound.
audioData().at(
static_cast<int>(m_position) + i);
40 if (!qFuzzyCompare(m_gain, 1.0))
42 for (
int i = 0; i < samplesToCopy; i++) { m_tempBuffer[i] =
static_cast<float>(m_gain * m_tempBuffer[i]); }
45 for (
int i = 0; i < samplesToCopy; i++) { samples[i] = m_tempBuffer.at(i); }
47 m_position += samplesToCopy;
49 if (m_position > availableSamples - 1)
51 if (m_looping) { m_position = 0; }
52 else { m_isFinished =
true; }
55 return static_cast<int>(samplesToCopy);
bool isLoaded()
Is resource already loaded?
const QString & getFileName() const
Corresponding file.
const QVector< float > & audioData() const
Audio data.
virtual int readSamples(QVector< float > &samples, qint64 count)
copydoc ISampleProvider::readSamples
Sample provider interface.
Free functions in swift::misc.
QString classNameShort(const QObject *object)
Class name as from QMetaObject::className without namespace.