From efbb769b24e1a3b88326578042029876b09b4dea Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk <valentyn.doroshchuk@qt.io> Date: Wed, 27 Sep 2017 17:37:25 +0200 Subject: [PATCH] Support changing of volume in 24-bit audio samples Introduced a fix to support changing of volume for 3 bytes samples audio stream. Task-number: QTBUG-60579 Change-Id: I4ba4a9a1cf65812ccbc46b40c78546875d5e4d73 Reviewed-by: Christian Stromme <christian.stromme@qt.io> --- src/multimedia/audio/qaudiohelpers.cpp | 49 ++++++++++++++++++ .../auto/integration/qsoundeffect/test24.wav | Bin 0 -> 16482 bytes .../qsoundeffect/tst_qsoundeffect.cpp | 27 ++++++++++ 3 files changed, 76 insertions(+) create mode 100644 tests/auto/integration/qsoundeffect/test24.wav diff --git a/src/multimedia/audio/qaudiohelpers.cpp b/src/multimedia/audio/qaudiohelpers.cpp index 8aa4c090b..fae591477 100644 --- a/src/multimedia/audio/qaudiohelpers.cpp +++ b/src/multimedia/audio/qaudiohelpers.cpp @@ -43,6 +43,49 @@ QT_BEGIN_NAMESPACE +// Base implementation of 24 bits number. +// Used to adjust 3 bytes values by a factor. +// TODO: Uses little-endian only. +class Int24 +{ +public: + quint8 data[3]; + Int24(qint32 v) { + data[0] = v & 0xFF; + data[1] = (v & 0xFF00) >> 8; + data[2] = (v & 0xFF0000) >> 16; + } + template<class T> + T multiply(qreal factor, T v = 0) const { + v |= data[0]; + v |= data[1] << 8; + v |= data[2] << 16; + v *= factor; + return v; + } +}; + +class qint24: public Int24 +{ +public: + qint24(qint32 v): Int24(v) {} + qint24 operator*(qreal factor) const { + // Checks if it is a signed value. + qint32 v = (data[2] & 0x80) ? 0xFF000000 : 0; + return multiply(factor, v); + } +}; + +class quint24: public Int24 +{ +public: + quint24(quint32 v): Int24(v) {} + quint24 operator*(qreal factor) const { + return multiply<quint32>(factor); + } +}; + + namespace QAudioHelperInternal { @@ -101,6 +144,12 @@ void qMultiplySamples(qreal factor, const QAudioFormat &format, const void* src, else if (format.sampleType() == QAudioFormat::UnSignedInt) QAudioHelperInternal::adjustUnsignedSamples<quint16>(factor,src,dest,samplesCount); break; + case 24: + if (format.sampleType() == QAudioFormat::SignedInt) + QAudioHelperInternal::adjustSamples<qint24>(factor,src,dest,samplesCount); + else if (format.sampleType() == QAudioFormat::UnSignedInt) + QAudioHelperInternal::adjustSamples<quint24>(factor,src,dest,samplesCount); + break; default: if (format.sampleType() == QAudioFormat::SignedInt) QAudioHelperInternal::adjustSamples<qint32>(factor,src,dest,samplesCount); diff --git a/tests/auto/integration/qsoundeffect/test24.wav b/tests/auto/integration/qsoundeffect/test24.wav new file mode 100644 index 0000000000000000000000000000000000000000..9575aaaee3bc7563a0ec8a2157afe6037eca10ad GIT binary patch literal 16482 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 Ryw*9db<S&@|Hrk?{{Sz=?E?S+ literal 0 HcmV?d00001 diff --git a/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp b/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp index 5be889096..fa98c8b16 100644 --- a/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp +++ b/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp @@ -62,12 +62,14 @@ private slots: void testSetSourceWhilePlaying(); void testSupportedMimeTypes(); void testCorruptFile(); + void testPlaying24Bits(); private: QSoundEffect* sound; QUrl url; // test.wav: pcm_s16le, 48000 Hz, stereo, s16 QUrl url2; // test_tone.wav: pcm_s16le, 44100 Hz, mono QUrl urlCorrupted; // test_corrupted.wav: corrupted + QUrl url24Bits; // test24.wav pcm_s24le, 44100 Hz, mono }; void tst_QSoundEffect::init() @@ -105,6 +107,11 @@ void tst_QSoundEffect::initTestCase() QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName)); urlCorrupted = QUrl::fromLocalFile(fullPath); + testFileName = QStringLiteral("test24.wav"); + fullPath = QFINDTESTDATA(testFileName); + QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName)); + url24Bits = QUrl::fromLocalFile(fullPath); + sound = new QSoundEffect(this); QVERIFY(sound->source().isEmpty()); @@ -409,6 +416,26 @@ void tst_QSoundEffect::testCorruptFile() } } +void tst_QSoundEffect::testPlaying24Bits() +{ + sound->setLoopCount(QSoundEffect::Infinite); + sound->setSource(url24Bits); + QTestEventLoop::instance().enterLoop(1); + sound->play(); + QTestEventLoop::instance().enterLoop(1); + QTRY_COMPARE(sound->isPlaying(), true); + sound->stop(); + + QSignalSpy readSignal(sound, SIGNAL(volumeChanged())); + sound->setVolume(0.5); + QCOMPARE(sound->volume(), 0.5); + sound->play(); + QTestEventLoop::instance().enterLoop(1); + QTRY_COMPARE(sound->isPlaying(), true); + QCOMPARE(readSignal.count(), 1); + sound->stop(); +} + QTEST_MAIN(tst_QSoundEffect) #include "tst_qsoundeffect.moc" -- GitLab