mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 05:58:27 +02:00
Recording audio fixes
This commit is contained in:
parent
07b3597ae3
commit
ffafd3194e
4 changed files with 11 additions and 14 deletions
|
@ -604,7 +604,7 @@ void MyAvatar::startRecording() {
|
||||||
// connect to AudioClient's signal so we get input audio
|
// connect to AudioClient's signal so we get input audio
|
||||||
auto audioClient = DependencyManager::get<AudioClient>();
|
auto audioClient = DependencyManager::get<AudioClient>();
|
||||||
connect(audioClient.data(), &AudioClient::inputReceived, _recorder.data(),
|
connect(audioClient.data(), &AudioClient::inputReceived, _recorder.data(),
|
||||||
&Recorder::recordAudio, Qt::BlockingQueuedConnection);
|
&Recorder::recordAudio, Qt::QueuedConnection);
|
||||||
|
|
||||||
_recorder->startRecording();
|
_recorder->startRecording();
|
||||||
}
|
}
|
||||||
|
|
|
@ -802,16 +802,14 @@ void AudioClient::handleAudioInput() {
|
||||||
_timeSinceLastClip += (float) numNetworkSamples / (float) AudioConstants::SAMPLE_RATE;
|
_timeSinceLastClip += (float) numNetworkSamples / (float) AudioConstants::SAMPLE_RATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t* inputAudioSamples = new int16_t[inputSamplesRequired];
|
auto inputAudioSamples = std::unique_ptr<int16_t[]>(new int16_t[inputSamplesRequired]);
|
||||||
_inputRingBuffer.readSamples(inputAudioSamples, inputSamplesRequired);
|
_inputRingBuffer.readSamples(inputAudioSamples.get(), inputSamplesRequired);
|
||||||
|
|
||||||
possibleResampling(_inputToNetworkResampler,
|
possibleResampling(_inputToNetworkResampler,
|
||||||
inputAudioSamples, networkAudioSamples,
|
inputAudioSamples.get(), networkAudioSamples,
|
||||||
inputSamplesRequired, numNetworkSamples,
|
inputSamplesRequired, numNetworkSamples,
|
||||||
_inputFormat, _desiredInputFormat);
|
_inputFormat, _desiredInputFormat);
|
||||||
|
|
||||||
delete[] inputAudioSamples;
|
|
||||||
|
|
||||||
// Remove DC offset
|
// Remove DC offset
|
||||||
if (!_isStereoInput && !_audioSourceInjectEnabled) {
|
if (!_isStereoInput && !_audioSourceInjectEnabled) {
|
||||||
_inputGate.removeDCOffset(networkAudioSamples, numNetworkSamples);
|
_inputGate.removeDCOffset(networkAudioSamples, numNetworkSamples);
|
||||||
|
@ -842,8 +840,7 @@ void AudioClient::handleAudioInput() {
|
||||||
_lastInputLoudness = fabs(loudness / numNetworkSamples);
|
_lastInputLoudness = fabs(loudness / numNetworkSamples);
|
||||||
}
|
}
|
||||||
|
|
||||||
emit inputReceived(QByteArray(reinterpret_cast<const char*>(networkAudioSamples),
|
emit inputReceived({reinterpret_cast<char*>(networkAudioSamples), numNetworkBytes});
|
||||||
AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * sizeof(AudioConstants::AudioSample)));
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// our input loudness is 0, since we're muted
|
// our input loudness is 0, since we're muted
|
||||||
|
|
|
@ -205,7 +205,7 @@ void AudioInjector::injectToMixer() {
|
||||||
|
|
||||||
while (_currentSendOffset < _audioData.size() && !_shouldStop) {
|
while (_currentSendOffset < _audioData.size() && !_shouldStop) {
|
||||||
|
|
||||||
int bytesToCopy = std::min(((_options.stereo) ? 2 : 1) * AudioConstants::NETWORK_FRAME_BYTES_PER_CHANNEL,
|
int bytesToCopy = std::min((_options.stereo ? 2 : 1) * AudioConstants::NETWORK_FRAME_BYTES_PER_CHANNEL,
|
||||||
_audioData.size() - _currentSendOffset);
|
_audioData.size() - _currentSendOffset);
|
||||||
|
|
||||||
// Measure the loudness of this frame
|
// Measure the loudness of this frame
|
||||||
|
@ -261,7 +261,7 @@ void AudioInjector::injectToMixer() {
|
||||||
|
|
||||||
// not the first packet and not done
|
// not the first packet and not done
|
||||||
// sleep for the appropriate time
|
// sleep for the appropriate time
|
||||||
int usecToSleep = (++nextFrame * AudioConstants::NETWORK_FRAME_USECS) - timer.nsecsElapsed() / 1000;
|
int usecToSleep = (++nextFrame * (_options.stereo ? 2 : 1) * AudioConstants::NETWORK_FRAME_USECS) - timer.nsecsElapsed() / 1000;
|
||||||
|
|
||||||
if (usecToSleep > 0) {
|
if (usecToSleep > 0) {
|
||||||
usleep(usecToSleep);
|
usleep(usecToSleep);
|
||||||
|
|
|
@ -69,10 +69,10 @@ const RecordingFrame& Recording::getFrame(int i) const {
|
||||||
|
|
||||||
int Recording::numberAudioChannel() const {
|
int Recording::numberAudioChannel() const {
|
||||||
// Check for stereo audio
|
// Check for stereo audio
|
||||||
int MSEC_PER_SEC = 1000;
|
float MSEC_PER_SEC = 1000.0f;
|
||||||
int channelLength = (getLength() / MSEC_PER_SEC) *
|
float channelLength = ((float)getLength() / MSEC_PER_SEC) * AudioConstants::SAMPLE_RATE *
|
||||||
AudioConstants::SAMPLE_RATE * sizeof(AudioConstants::AudioSample);
|
sizeof(AudioConstants::AudioSample);
|
||||||
return glm::round((float)channelLength / (float)getAudioData().size());
|
return glm::round((float)getAudioData().size() / channelLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Recording::addFrame(int timestamp, RecordingFrame &frame) {
|
void Recording::addFrame(int timestamp, RecordingFrame &frame) {
|
||||||
|
|
Loading…
Reference in a new issue