mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 21:43:03 +02:00
retain stereo on dead audio resampling
This commit is contained in:
parent
4974c88880
commit
972a611d03
3 changed files with 28 additions and 27 deletions
|
@ -1152,9 +1152,9 @@ bool AudioClient::outputLocalInjector(bool isStereo, AudioInjector* injector) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::outputFormatChanged() {
|
void AudioClient::outputFormatChanged() {
|
||||||
int outputFormatChannelCountTimesSampleRate = _outputFormat.channelCount() * _outputFormat.sampleRate();
|
_outputFrameSize = (AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * _outputFormat.channelCount() * _outputFormat.sampleRate()) /
|
||||||
_outputFrameSize = AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * outputFormatChannelCountTimesSampleRate / _desiredOutputFormat.sampleRate();
|
_desiredOutputFormat.sampleRate();
|
||||||
_receivedAudioStream.outputFormatChanged(outputFormatChannelCountTimesSampleRate);
|
_receivedAudioStream.outputFormatChanged(_outputFormat.sampleRate(), _outputFormat.channelCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo) {
|
bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo) {
|
||||||
|
|
|
@ -17,27 +17,27 @@ static const int STEREO_FACTOR = 2;
|
||||||
MixedProcessedAudioStream::MixedProcessedAudioStream(int numFrameSamples, int numFramesCapacity, int numStaticJitterFrames)
|
MixedProcessedAudioStream::MixedProcessedAudioStream(int numFrameSamples, int numFramesCapacity, int numStaticJitterFrames)
|
||||||
: InboundAudioStream(numFrameSamples, numFramesCapacity, numStaticJitterFrames) {}
|
: InboundAudioStream(numFrameSamples, numFramesCapacity, numStaticJitterFrames) {}
|
||||||
|
|
||||||
void MixedProcessedAudioStream::outputFormatChanged(int outputFormatChannelCountTimesSampleRate) {
|
void MixedProcessedAudioStream::outputFormatChanged(int sampleRate, int channelCount) {
|
||||||
_outputFormatChannelsTimesSampleRate = outputFormatChannelCountTimesSampleRate;
|
_outputSampleRate = sampleRate;
|
||||||
int deviceOutputFrameSize = networkToDeviceSamples(AudioConstants::NETWORK_FRAME_SAMPLES_STEREO);
|
_outputChannelCount = channelCount;
|
||||||
_ringBuffer.resizeForFrameSize(deviceOutputFrameSize);
|
int deviceOutputFrameFrames = networkToDeviceFrames(AudioConstants::NETWORK_FRAME_SAMPLES_STEREO / STEREO_FACTOR);
|
||||||
|
int deviceOutputFrameSamples = deviceOutputFrameFrames * STEREO_FACTOR;
|
||||||
|
_ringBuffer.resizeForFrameSize(deviceOutputFrameSamples);
|
||||||
}
|
}
|
||||||
|
|
||||||
int MixedProcessedAudioStream::writeDroppableSilentSamples(int silentSamples) {
|
int MixedProcessedAudioStream::writeDroppableSilentSamples(int silentSamples) {
|
||||||
|
int deviceSilentFrames = networkToDeviceFrames(silentSamples / STEREO_FACTOR);
|
||||||
int deviceSilentSamplesWritten = InboundAudioStream::writeDroppableSilentSamples(networkToDeviceSamples(silentSamples));
|
int deviceSilentSamples = deviceSilentFrames * STEREO_FACTOR;
|
||||||
|
int deviceSilentSamplesWritten = InboundAudioStream::writeDroppableSilentSamples(deviceSilentSamples);
|
||||||
emit addedSilence(deviceToNetworkSamples(deviceSilentSamplesWritten) / STEREO_FACTOR);
|
emit addedSilence(deviceToNetworkFrames(deviceSilentSamplesWritten / STEREO_FACTOR));
|
||||||
|
|
||||||
return deviceSilentSamplesWritten;
|
return deviceSilentSamplesWritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MixedProcessedAudioStream::writeLastFrameRepeatedWithFade(int samples) {
|
int MixedProcessedAudioStream::writeLastFrameRepeatedWithFade(int samples) {
|
||||||
|
int deviceFrames = networkToDeviceFrames(samples / STEREO_FACTOR);
|
||||||
int deviceSamplesWritten = InboundAudioStream::writeLastFrameRepeatedWithFade(networkToDeviceSamples(samples));
|
int deviceSamples = deviceFrames * STEREO_FACTOR;
|
||||||
|
int deviceSamplesWritten = InboundAudioStream::writeLastFrameRepeatedWithFade(deviceSamples);
|
||||||
emit addedLastFrameRepeatedWithFade(deviceToNetworkSamples(deviceSamplesWritten) / STEREO_FACTOR);
|
emit addedLastFrameRepeatedWithFade(deviceToNetworkFrames(deviceSamplesWritten / STEREO_FACTOR));
|
||||||
|
|
||||||
return deviceSamplesWritten;
|
return deviceSamplesWritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,12 +60,12 @@ int MixedProcessedAudioStream::parseAudioData(PacketType type, const QByteArray&
|
||||||
return packetAfterStreamProperties.size();
|
return packetAfterStreamProperties.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int MixedProcessedAudioStream::networkToDeviceSamples(int networkSamples) {
|
int MixedProcessedAudioStream::networkToDeviceFrames(int networkFrames) {
|
||||||
return (quint64)networkSamples * (quint64)_outputFormatChannelsTimesSampleRate / (quint64)(STEREO_FACTOR
|
return ((quint64)networkFrames * _outputChannelCount * _outputSampleRate) /
|
||||||
* AudioConstants::SAMPLE_RATE);
|
(quint64)(STEREO_FACTOR * AudioConstants::SAMPLE_RATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int MixedProcessedAudioStream::deviceToNetworkSamples(int deviceSamples) {
|
int MixedProcessedAudioStream::deviceToNetworkFrames(int deviceFrames) {
|
||||||
return (quint64)deviceSamples * (quint64)(STEREO_FACTOR * AudioConstants::SAMPLE_RATE)
|
return (quint64)deviceFrames * (quint64)(STEREO_FACTOR * AudioConstants::SAMPLE_RATE) /
|
||||||
/ (quint64)_outputFormatChannelsTimesSampleRate;
|
(_outputSampleRate * _outputChannelCount);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ signals:
|
||||||
void processSamples(const QByteArray& inputBuffer, QByteArray& outputBuffer);
|
void processSamples(const QByteArray& inputBuffer, QByteArray& outputBuffer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void outputFormatChanged(int outputFormatChannelCountTimesSampleRate);
|
void outputFormatChanged(int sampleRate, int channelCount);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int writeDroppableSilentSamples(int silentSamples) override;
|
int writeDroppableSilentSamples(int silentSamples) override;
|
||||||
|
@ -38,11 +38,12 @@ protected:
|
||||||
int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties) override;
|
int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int networkToDeviceSamples(int networkSamples);
|
int networkToDeviceFrames(int networkFrames);
|
||||||
int deviceToNetworkSamples(int deviceSamples);
|
int deviceToNetworkFrames(int deviceFrames);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _outputFormatChannelsTimesSampleRate;
|
quint64 _outputSampleRate;
|
||||||
|
quint64 _outputChannelCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_MixedProcessedAudioStream_h
|
#endif // hifi_MixedProcessedAudioStream_h
|
||||||
|
|
Loading…
Reference in a new issue