diff --git a/src/blackcore/afv/audio/callsignsampleprovider.cpp b/src/blackcore/afv/audio/callsignsampleprovider.cpp index bf54f6363..ea641fd7c 100644 --- a/src/blackcore/afv/audio/callsignsampleprovider.cpp +++ b/src/blackcore/afv/audio/callsignsampleprovider.cpp @@ -11,6 +11,7 @@ #include "callsignsampleprovider.h" #include "callsigndelaycache.h" #include "blacksound/sampleprovider/samples.h" +#include "blacksound/audioutilities.h" #include "blackcore/afv/audio/receiversampleprovider.h" #include #include @@ -60,7 +61,7 @@ namespace BlackCore connect(&m_timer, &QTimer::timeout, this, &CallsignSampleProvider::timerElapsed); } - int CallsignSampleProvider::readSamples(QVector &samples, qint64 count) + int CallsignSampleProvider::readSamples(QVector &samples, qint64 count) { int noOfSamples = m_mixer->readSamples(samples, count); @@ -103,7 +104,7 @@ namespace BlackCore if (delayMs > 0) { int phaseDelayLength = (m_audioFormat.sampleRate() / 1000) * delayMs; - QVector phaseDelay(phaseDelayLength * 2, 0); + QVector phaseDelay(phaseDelayLength * 2, 0); m_audioInput->addSamples(phaseDelay); } } @@ -131,7 +132,7 @@ namespace BlackCore setEffects(); QVector audio = decodeOpus(audioDto.audio); - m_audioInput->addSamples(audio); + m_audioInput->addSamples(BlackSound::convertFromShortToFloat(audio)); m_lastPacketLatch = audioDto.lastPacket; if (audioDto.lastPacket && !m_underflow) { CallsignDelayCache::instance().success(m_callsign); } m_lastSamplesAddedUtc = QDateTime::currentDateTimeUtc(); diff --git a/src/blackcore/afv/audio/callsignsampleprovider.h b/src/blackcore/afv/audio/callsignsampleprovider.h index 9a32bfd6c..c98a8d15e 100644 --- a/src/blackcore/afv/audio/callsignsampleprovider.h +++ b/src/blackcore/afv/audio/callsignsampleprovider.h @@ -44,7 +44,7 @@ namespace BlackCore //! Ctor CallsignSampleProvider(const QAudioFormat &audioFormat, const BlackCore::Afv::Audio::CReceiverSampleProvider *receiver, QObject *parent = nullptr); - int readSamples(QVector &samples, qint64 count) override; + int readSamples(QVector &samples, qint64 count) override; //! The callsign const QString &callsign() const { return m_callsign; } diff --git a/src/blackcore/afv/audio/output.cpp b/src/blackcore/afv/audio/output.cpp index bc82fb382..50219ce9e 100644 --- a/src/blackcore/afv/audio/output.cpp +++ b/src/blackcore/afv/audio/output.cpp @@ -36,22 +36,20 @@ namespace BlackCore int sampleBytes = m_outputFormat.sampleSize() / 8; int channelCount = m_outputFormat.channelCount(); qint64 count = maxlen / (sampleBytes * channelCount); - QVector buffer; + QVector buffer; m_sampleProvider->readSamples(buffer, count); - for (const qint16 sample : buffer) + for (float sample : buffer) { - qint16 sampleInput = sample; - sampleInput = qAbs(sampleInput); - if (sampleInput > m_maxSampleOutput) { m_maxSampleOutput = sampleInput; } + float absSample = qAbs(sample); + if (absSample > m_maxSampleOutput) { m_maxSampleOutput = absSample; } } m_sampleCount += buffer.size(); if (m_sampleCount >= SampleCountPerEvent) { OutputVolumeStreamArgs outputVolumeStreamArgs; - qint16 maxInt = std::numeric_limits::max(); - outputVolumeStreamArgs.PeakRaw = m_maxSampleOutput / maxInt; + outputVolumeStreamArgs.PeakRaw = m_maxSampleOutput / 1.0; outputVolumeStreamArgs.PeakDB = static_cast(20 * std::log10(outputVolumeStreamArgs.PeakRaw)); const double db = qBound(m_minDb, outputVolumeStreamArgs.PeakDB, m_maxDb); double ratio = (db - m_minDb) / (m_maxDb - m_minDb); @@ -91,8 +89,8 @@ namespace BlackCore QAudioFormat outputFormat; outputFormat.setSampleRate(48000); outputFormat.setChannelCount(1); - outputFormat.setSampleSize(16); - outputFormat.setSampleType(QAudioFormat::SignedInt); + outputFormat.setSampleSize(32); + outputFormat.setSampleType(QAudioFormat::Float); outputFormat.setByteOrder(QAudioFormat::LittleEndian); outputFormat.setCodec("audio/pcm"); diff --git a/src/blackcore/afv/audio/output.h b/src/blackcore/afv/audio/output.h index b8c5277fa..d55b6a77d 100644 --- a/src/blackcore/afv/audio/output.h +++ b/src/blackcore/afv/audio/output.h @@ -60,7 +60,7 @@ namespace BlackCore static constexpr int SampleCountPerEvent = 4800; QAudioFormat m_outputFormat; - double m_maxSampleOutput = 0; + float m_maxSampleOutput = 0.0; int m_sampleCount = 0; const double m_maxDb = 0; const double m_minDb = -40; diff --git a/src/blackcore/afv/audio/receiversampleprovider.cpp b/src/blackcore/afv/audio/receiversampleprovider.cpp index 6b4ee5575..dcf955a34 100644 --- a/src/blackcore/afv/audio/receiversampleprovider.cpp +++ b/src/blackcore/afv/audio/receiversampleprovider.cpp @@ -82,7 +82,7 @@ namespace BlackCore } } - int CReceiverSampleProvider::readSamples(QVector &samples, qint64 count) + int CReceiverSampleProvider::readSamples(QVector &samples, qint64 count) { int numberOfInUseInputs = activeCallsigns(); diff --git a/src/blackcore/afv/audio/receiversampleprovider.h b/src/blackcore/afv/audio/receiversampleprovider.h index 1a955bb97..7a3e737d5 100644 --- a/src/blackcore/afv/audio/receiversampleprovider.h +++ b/src/blackcore/afv/audio/receiversampleprovider.h @@ -57,7 +57,7 @@ namespace BlackCore //! @} //! \copydoc BlackSound::SampleProvider::ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; void addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio); void addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio); diff --git a/src/blackcore/afv/audio/soundcardsampleprovider.cpp b/src/blackcore/afv/audio/soundcardsampleprovider.cpp index c9982d0a6..142ff24f7 100644 --- a/src/blackcore/afv/audio/soundcardsampleprovider.cpp +++ b/src/blackcore/afv/audio/soundcardsampleprovider.cpp @@ -85,7 +85,7 @@ namespace BlackCore } } - int CSoundcardSampleProvider::readSamples(QVector &samples, qint64 count) + int CSoundcardSampleProvider::readSamples(QVector &samples, qint64 count) { return m_mixer->readSamples(samples, count); } diff --git a/src/blackcore/afv/audio/soundcardsampleprovider.h b/src/blackcore/afv/audio/soundcardsampleprovider.h index ee075b344..82a7763d8 100644 --- a/src/blackcore/afv/audio/soundcardsampleprovider.h +++ b/src/blackcore/afv/audio/soundcardsampleprovider.h @@ -43,7 +43,7 @@ namespace BlackCore void pttUpdate(bool active, const QVector &txTransceivers); //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Add OPUS samples void addOpusSamples(const IAudioDto &audioDto, const QVector &rxTransceivers); diff --git a/src/blacksound/audioutilities.cpp b/src/blacksound/audioutilities.cpp index 36d67e021..1e4d1aab9 100644 --- a/src/blacksound/audioutilities.cpp +++ b/src/blacksound/audioutilities.cpp @@ -10,12 +10,25 @@ namespace BlackSound { + QVector convertBytesTo32BitFloatPCM(const QByteArray input) + { + int inputSamples = input.size() / 2; // 16 bit input, so 2 bytes per sample + QVector output; + output.fill(0, inputSamples); + + for (int n = 0; n < inputSamples; n++) + { + output[n] = *reinterpret_cast(input.data() + n * 2); + output[n] /= 32767.0; + } + return output; + } + QVector convertBytesTo16BitPCM(const QByteArray input) { int inputSamples = input.size() / 2; // 16 bit input, so 2 bytes per sample QVector output; output.fill(0, inputSamples); - for (int n = 0; n < inputSamples; n++) { output[n] = *reinterpret_cast(input.data() + n * 2); @@ -30,11 +43,11 @@ namespace BlackSound return {}; } - QVector convertFromMonoToStereo(const QVector &mono) + QVector convertFromMonoToStereo(const QVector &mono) { - QVector stereo; + QVector stereo; stereo.reserve(mono.size() * 2); - for (qint16 sample : mono) + for (float sample : mono) { stereo << sample; stereo << sample; @@ -53,9 +66,9 @@ namespace BlackSound return mono; } - QVector convertFromShortToDouble(const QVector &input) + QVector convertFromShortToFloat(const QVector &input) { - QVector output; + QVector output; for (auto sample : input) { output.push_back(sample / 32768.0); @@ -63,14 +76,4 @@ namespace BlackSound return output; } - QVector convertFromDoubleToShort(const QVector &input) - { - QVector output; - for (auto sample : input) - { - output.push_back(sample * 32768); - } - return output; - } - } // ns diff --git a/src/blacksound/audioutilities.h b/src/blacksound/audioutilities.h index eb072e41e..3854116b1 100644 --- a/src/blacksound/audioutilities.h +++ b/src/blacksound/audioutilities.h @@ -18,12 +18,12 @@ namespace BlackSound { //! Conversion functions @{ + BLACKSOUND_EXPORT QVector convertBytesTo32BitFloatPCM(const QByteArray input); BLACKSOUND_EXPORT QVector convertBytesTo16BitPCM(const QByteArray input); BLACKSOUND_EXPORT QVector convertFloatBytesTo16BitPCM(const QByteArray input); - BLACKSOUND_EXPORT QVector convertFromMonoToStereo(const QVector &mono); + BLACKSOUND_EXPORT QVector convertFromMonoToStereo(const QVector &mono); BLACKSOUND_EXPORT QVector convertFromStereoToMono(const QVector &stereo); - BLACKSOUND_EXPORT QVector convertFromShortToDouble(const QVector &input); - BLACKSOUND_EXPORT QVector convertFromDoubleToShort(const QVector &input); + BLACKSOUND_EXPORT QVector convertFromShortToFloat(const QVector &input); //! @} } // ns diff --git a/src/blacksound/sampleprovider/bufferedwaveprovider.cpp b/src/blacksound/sampleprovider/bufferedwaveprovider.cpp index 368dd593a..bc1bab2be 100644 --- a/src/blacksound/sampleprovider/bufferedwaveprovider.cpp +++ b/src/blacksound/sampleprovider/bufferedwaveprovider.cpp @@ -13,7 +13,7 @@ namespace BlackSound m_maxBufferSize = format.bytesForDuration(10 * 1000 * 1000); } - void CBufferedWaveProvider::addSamples(const QVector &samples) + void CBufferedWaveProvider::addSamples(const QVector &samples) { int delta = m_audioBuffer.size() + samples.size() - m_maxBufferSize; if (delta > 0) @@ -23,7 +23,7 @@ namespace BlackSound m_audioBuffer.append(samples); } - int CBufferedWaveProvider::readSamples(QVector &samples, qint64 count) + int CBufferedWaveProvider::readSamples(QVector &samples, qint64 count) { qint64 len = qMin(count, static_cast(m_audioBuffer.size())); samples = m_audioBuffer.mid(0, len); diff --git a/src/blacksound/sampleprovider/bufferedwaveprovider.h b/src/blacksound/sampleprovider/bufferedwaveprovider.h index 149e70bdf..7d5bd3bc9 100644 --- a/src/blacksound/sampleprovider/bufferedwaveprovider.h +++ b/src/blacksound/sampleprovider/bufferedwaveprovider.h @@ -32,10 +32,10 @@ namespace BlackSound CBufferedWaveProvider(const QAudioFormat &format, QObject *parent = nullptr); //! Add samples - void addSamples(const QVector &samples); + void addSamples(const QVector &samples); //! ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Bytes from buffer int getBufferedBytes() const { return m_audioBuffer.size(); } @@ -44,7 +44,7 @@ namespace BlackSound void clearBuffer(); private: - QVector m_audioBuffer; + QVector m_audioBuffer; qint32 m_maxBufferSize; }; } // ns diff --git a/src/blacksound/sampleprovider/equalizersampleprovider.cpp b/src/blacksound/sampleprovider/equalizersampleprovider.cpp index 80e957e4d..cecc53d9e 100644 --- a/src/blacksound/sampleprovider/equalizersampleprovider.cpp +++ b/src/blacksound/sampleprovider/equalizersampleprovider.cpp @@ -13,25 +13,19 @@ namespace BlackSound setupPreset(preset); } - int CEqualizerSampleProvider::readSamples(QVector &samples, qint64 count) + int CEqualizerSampleProvider::readSamples(QVector &samples, qint64 count) { int samplesRead = m_sourceProvider->readSamples(samples, count); if (m_bypass) return samplesRead; - QVector doubleSamples = convertFromShortToDouble(samples); - for (int n = 0; n < samplesRead; n++) { - // TODO stereo implementation - for (int band = 0; band < m_filters.size(); band++) { - doubleSamples[n] = m_filters[band].transform(doubleSamples[n]); + samples[n] = m_filters[band].transform(samples[n]); } - doubleSamples[n] *= m_outputGain; + samples[n] *= m_outputGain; } - - samples = convertFromDoubleToShort(doubleSamples); return samplesRead; } diff --git a/src/blacksound/sampleprovider/equalizersampleprovider.h b/src/blacksound/sampleprovider/equalizersampleprovider.h index 163cf9881..e58870f25 100644 --- a/src/blacksound/sampleprovider/equalizersampleprovider.h +++ b/src/blacksound/sampleprovider/equalizersampleprovider.h @@ -38,7 +38,7 @@ namespace BlackSound CEqualizerSampleProvider(ISampleProvider *sourceProvider, EqualizerPresets preset, QObject *parent = nullptr); //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Bypassing? void setBypassEffects(bool value) { m_bypass = value; } diff --git a/src/blacksound/sampleprovider/mixingsampleprovider.cpp b/src/blacksound/sampleprovider/mixingsampleprovider.cpp index 0f2da1998..fd686dabf 100644 --- a/src/blacksound/sampleprovider/mixingsampleprovider.cpp +++ b/src/blacksound/sampleprovider/mixingsampleprovider.cpp @@ -12,7 +12,7 @@ namespace BlackSound { namespace SampleProvider { - int CMixingSampleProvider::readSamples(QVector &samples, qint64 count) + int CMixingSampleProvider::readSamples(QVector &samples, qint64 count) { samples.clear(); samples.fill(0, count); @@ -22,7 +22,7 @@ namespace BlackSound for (int i = 0; i < m_sources.size(); i++) { ISampleProvider *sampleProvider = m_sources.at(i); - QVector sourceBuffer; + QVector sourceBuffer; int len = sampleProvider->readSamples(sourceBuffer, count); for (int n = 0; n < len; n++) diff --git a/src/blacksound/sampleprovider/mixingsampleprovider.h b/src/blacksound/sampleprovider/mixingsampleprovider.h index 250a23c9f..1c769f22a 100644 --- a/src/blacksound/sampleprovider/mixingsampleprovider.h +++ b/src/blacksound/sampleprovider/mixingsampleprovider.h @@ -30,7 +30,7 @@ namespace BlackSound void addMixerInput(ISampleProvider *provider) { m_sources.append(provider); } //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; private: QVector m_sources; diff --git a/src/blacksound/sampleprovider/pinknoisegenerator.cpp b/src/blacksound/sampleprovider/pinknoisegenerator.cpp index 3a8398f00..c424df9c5 100644 --- a/src/blacksound/sampleprovider/pinknoisegenerator.cpp +++ b/src/blacksound/sampleprovider/pinknoisegenerator.cpp @@ -14,7 +14,7 @@ namespace BlackSound { namespace SampleProvider { - int CPinkNoiseGenerator::readSamples(QVector &samples, qint64 count) + int CPinkNoiseGenerator::readSamples(QVector &samples, qint64 count) { samples.clear(); samples.fill(0, count); @@ -32,7 +32,7 @@ namespace BlackSound double pink = pinkNoiseBuffer[0] + pinkNoiseBuffer[1] + pinkNoiseBuffer[2] + pinkNoiseBuffer[3] + pinkNoiseBuffer[4] + pinkNoiseBuffer[5] + pinkNoiseBuffer[6] + white * 0.5362; pinkNoiseBuffer[6] = white * 0.115926; double sampleValue = (m_gain * (pink / 5)); - samples[sampleCount] = sampleValue * 32768; + samples[sampleCount] = sampleValue; } return count; } diff --git a/src/blacksound/sampleprovider/pinknoisegenerator.h b/src/blacksound/sampleprovider/pinknoisegenerator.h index 165d76e3e..7a8b4fa28 100644 --- a/src/blacksound/sampleprovider/pinknoisegenerator.h +++ b/src/blacksound/sampleprovider/pinknoisegenerator.h @@ -33,7 +33,7 @@ namespace BlackSound CPinkNoiseGenerator(QObject *parent = nullptr) : ISampleProvider(parent) {} //! Read samples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Gain void setGain(double gain) { m_gain = gain; } diff --git a/src/blacksound/sampleprovider/resourcesound.cpp b/src/blacksound/sampleprovider/resourcesound.cpp index 3270c71f9..2dd312b27 100644 --- a/src/blacksound/sampleprovider/resourcesound.cpp +++ b/src/blacksound/sampleprovider/resourcesound.cpp @@ -29,11 +29,12 @@ namespace BlackSound { if (wavFile.fileFormat().sampleType() == QAudioFormat::Float) { - m_samples = convertFloatBytesTo16BitPCM(wavFile.audioData()); + // Not implemented + // m_samples = convertFloatBytesTo16BitPCM(wavFile.audioData()); } else { - m_samples = convertBytesTo16BitPCM(wavFile.audioData()); + m_samples = convertBytesTo32BitFloatPCM(wavFile.audioData()); } m_fn = audioFileName; } diff --git a/src/blacksound/sampleprovider/resourcesound.h b/src/blacksound/sampleprovider/resourcesound.h index 51c096baf..0a6284a15 100644 --- a/src/blacksound/sampleprovider/resourcesound.h +++ b/src/blacksound/sampleprovider/resourcesound.h @@ -29,7 +29,7 @@ namespace BlackSound CResourceSound(const QString &audioFileName); //! Audio data - const QVector &audioData() const { return m_samples; } + const QVector &audioData() const { return m_samples; } //! Corresponding file const QString &getFileName() { return m_fn; } @@ -39,7 +39,7 @@ namespace BlackSound private: QString m_fn; //!< file name - QVector m_samples; + QVector m_samples; }; } // ns } // ns diff --git a/src/blacksound/sampleprovider/resourcesoundsampleprovider.cpp b/src/blacksound/sampleprovider/resourcesoundsampleprovider.cpp index 992e6bebe..0b195fc39 100644 --- a/src/blacksound/sampleprovider/resourcesoundsampleprovider.cpp +++ b/src/blacksound/sampleprovider/resourcesoundsampleprovider.cpp @@ -13,7 +13,7 @@ namespace BlackSound m_tempBuffer.resize(m_tempBufferSize); } - int CResourceSoundSampleProvider::readSamples(QVector &samples, qint64 count) + int CResourceSoundSampleProvider::readSamples(QVector &samples, qint64 count) { if (count > m_tempBufferSize) { @@ -35,7 +35,7 @@ namespace BlackSound { for (int i = 0; i < samplesToCopy; i++) { - m_tempBuffer[i] = static_cast(qRound(m_gain * m_tempBuffer[i])); + m_tempBuffer[i] *= m_gain; } } diff --git a/src/blacksound/sampleprovider/resourcesoundsampleprovider.h b/src/blacksound/sampleprovider/resourcesoundsampleprovider.h index 4c68a2a69..e3475b261 100644 --- a/src/blacksound/sampleprovider/resourcesoundsampleprovider.h +++ b/src/blacksound/sampleprovider/resourcesoundsampleprovider.h @@ -27,7 +27,7 @@ namespace BlackSound CResourceSoundSampleProvider(const CResourceSound &resourceSound, QObject *parent = nullptr); //! copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! copydoc ISampleProvider::isFinished virtual bool isFinished() const override { return m_isFinished; } @@ -43,8 +43,8 @@ namespace BlackSound //! @} //! Temp buffer @{ - QVector getTempBuffer() const { return m_tempBuffer; } - void setTempBuffer(const QVector &value) { m_tempBuffer = value; } + QVector getTempBuffer() const { return m_tempBuffer; } + void setTempBuffer(const QVector &value) { m_tempBuffer = value; } //! @} private: @@ -54,7 +54,7 @@ namespace BlackSound CResourceSound m_resourceSound; qint64 m_position = 0; const int m_tempBufferSize = 9600; //9600 = 200ms - QVector m_tempBuffer; + QVector m_tempBuffer; bool m_isFinished = false; }; } // ns diff --git a/src/blacksound/sampleprovider/sampleprovider.h b/src/blacksound/sampleprovider/sampleprovider.h index 79d57e3c6..bf0c98382 100644 --- a/src/blacksound/sampleprovider/sampleprovider.h +++ b/src/blacksound/sampleprovider/sampleprovider.h @@ -32,7 +32,7 @@ namespace BlackSound virtual ~ISampleProvider() override {} //! Read samples - virtual int readSamples(QVector &samples, qint64 count) = 0; + virtual int readSamples(QVector &samples, qint64 count) = 0; //! Finished? virtual bool isFinished() const { return false; } diff --git a/src/blacksound/sampleprovider/sawtoothgenerator.cpp b/src/blacksound/sampleprovider/sawtoothgenerator.cpp index d77decd93..cd62b59e2 100644 --- a/src/blacksound/sampleprovider/sawtoothgenerator.cpp +++ b/src/blacksound/sampleprovider/sawtoothgenerator.cpp @@ -18,7 +18,7 @@ namespace BlackSound m_frequency(frequency) {} - int CSawToothGenerator::readSamples(QVector &samples, qint64 count) + int CSawToothGenerator::readSamples(QVector &samples, qint64 count) { samples.clear(); samples.fill(0, static_cast(count)); @@ -28,7 +28,7 @@ namespace BlackSound double multiple = 2 * m_frequency / m_sampleRate; double sampleSaw = std::fmod((m_nSample * multiple), 2) - 1; double sampleValue = m_gain * sampleSaw; - samples[sampleCount] = static_cast(qRound(sampleValue * 32768)); + samples[sampleCount] = static_cast(sampleValue); m_nSample++; } return static_cast(count); diff --git a/src/blacksound/sampleprovider/sawtoothgenerator.h b/src/blacksound/sampleprovider/sawtoothgenerator.h index 09f0fbc73..2764aaaa1 100644 --- a/src/blacksound/sampleprovider/sawtoothgenerator.h +++ b/src/blacksound/sampleprovider/sawtoothgenerator.h @@ -31,7 +31,7 @@ namespace BlackSound CSawToothGenerator(double frequency, QObject *parent = nullptr); //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Set the gain void setGain(double gain) { m_gain = gain; } diff --git a/src/blacksound/sampleprovider/simplecompressoreffect.cpp b/src/blacksound/sampleprovider/simplecompressoreffect.cpp index 5d1ff01a4..f33b3b669 100644 --- a/src/blacksound/sampleprovider/simplecompressoreffect.cpp +++ b/src/blacksound/sampleprovider/simplecompressoreffect.cpp @@ -27,7 +27,7 @@ namespace BlackSound m_timer.start(3000); } - int CSimpleCompressorEffect::readSamples(QVector &samples, qint64 count) + int CSimpleCompressorEffect::readSamples(QVector &samples, qint64 count) { int samplesRead = m_sourceStream->readSamples(samples, count); @@ -35,12 +35,12 @@ namespace BlackSound { for (int sample = 0; sample < samplesRead; sample += channels) { - double in1 = samples.at(sample) / 32768.0; + double in1 = samples.at(sample); double in2 = (channels == 1) ? 0 : samples.at(sample + 1); m_simpleCompressor.process(in1, in2); - samples[sample] = in1 * 32768.0; + samples[sample] = in1; if (channels > 1) - samples[sample + 1] = in2 * 32768.0f; + samples[sample + 1] = in2; } } return samplesRead; diff --git a/src/blacksound/sampleprovider/simplecompressoreffect.h b/src/blacksound/sampleprovider/simplecompressoreffect.h index 0166c12d7..af878eda5 100644 --- a/src/blacksound/sampleprovider/simplecompressoreffect.h +++ b/src/blacksound/sampleprovider/simplecompressoreffect.h @@ -32,7 +32,7 @@ namespace BlackSound CSimpleCompressorEffect(ISampleProvider *source, QObject *parent = nullptr); //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Enable void setEnabled(bool enabled); diff --git a/src/blacksound/sampleprovider/volumesampleprovider.cpp b/src/blacksound/sampleprovider/volumesampleprovider.cpp index 325731523..d9fab070f 100644 --- a/src/blacksound/sampleprovider/volumesampleprovider.cpp +++ b/src/blacksound/sampleprovider/volumesampleprovider.cpp @@ -20,7 +20,7 @@ namespace BlackSound m_sourceProvider(sourceProvider) { } - int CVolumeSampleProvider::readSamples(QVector &samples, qint64 count) + int CVolumeSampleProvider::readSamples(QVector &samples, qint64 count) { int samplesRead = m_sourceProvider->readSamples(samples, count); @@ -28,7 +28,7 @@ namespace BlackSound { for (int n = 0; n < samplesRead; n++) { - samples[n] = static_cast(qRound(samples[n] * m_volume)); + samples[n] *= static_cast(m_volume); } } return samplesRead; diff --git a/src/blacksound/sampleprovider/volumesampleprovider.h b/src/blacksound/sampleprovider/volumesampleprovider.h index a7c481e51..691d406e6 100644 --- a/src/blacksound/sampleprovider/volumesampleprovider.h +++ b/src/blacksound/sampleprovider/volumesampleprovider.h @@ -28,7 +28,7 @@ namespace BlackSound CVolumeSampleProvider(ISampleProvider *sourceProvider, QObject *parent = nullptr); //! \copydoc ISampleProvider::readSamples - virtual int readSamples(QVector &samples, qint64 count) override; + virtual int readSamples(QVector &samples, qint64 count) override; //! Volume @{ double volume() const { return m_volume; }