From b0fd28beebb8e9b1bb1174e90c8555684c265f36 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 17 Mar 2015 16:16:25 +0100 Subject: [PATCH 1/3] Typo --- libraries/avatars/src/Player.cpp | 6 +++--- libraries/avatars/src/Player.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/avatars/src/Player.cpp b/libraries/avatars/src/Player.cpp index 2b92acb189..172d43c530 100644 --- a/libraries/avatars/src/Player.cpp +++ b/libraries/avatars/src/Player.cpp @@ -309,7 +309,7 @@ void Player::setCurrentFrame(int currentFrame) { if (isPlaying()) { _timer.start(); - setAudionInjectorPosition(); + setAudioInjectorPosition(); } else { _pausedFrame = _currentFrame; } @@ -354,7 +354,7 @@ void Player::setCurrentTime(int currentTime) { if (isPlaying()) { _timer.start(); - setAudionInjectorPosition(); + setAudioInjectorPosition(); } else { _pausedFrame = lowestBound; } @@ -372,7 +372,7 @@ void Player::setAudioOffset(int audioOffset) { _audioOffset = audioOffset; } -void Player::setAudionInjectorPosition() { +void Player::setAudioInjectorPosition() { int MSEC_PER_SEC = 1000; int SAMPLE_SIZE = 2; // 16 bits int CHANNEL_COUNT = 1; diff --git a/libraries/avatars/src/Player.h b/libraries/avatars/src/Player.h index 7ed76fa495..96f3cbc268 100644 --- a/libraries/avatars/src/Player.h +++ b/libraries/avatars/src/Player.h @@ -61,7 +61,7 @@ private: void setupAudioThread(); void cleanupAudioThread(); void loopRecording(); - void setAudionInjectorPosition(); + void setAudioInjectorPosition(); bool computeCurrentFrame(); AvatarData* _avatar; From 7121126e6fec26102fc5caa8b8dc1e3c63ffb751 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 17 Mar 2015 16:17:31 +0100 Subject: [PATCH 2/3] Wrong byte array size in audio client --- libraries/audio-client/src/AudioClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index c083fbc085..0dcab2c81b 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -812,7 +812,7 @@ void AudioClient::handleAudioInput() { } emit inputReceived(QByteArray(reinterpret_cast(networkAudioSamples), - AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL)); + AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * sizeof(AudioConstants::AudioSample))); } else { // our input loudness is 0, since we're muted From 3a11ed0574b937fd8fb51cae67f4f0be4231f86b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 17 Mar 2015 16:34:50 +0100 Subject: [PATCH 3/3] Account for stereo audio in recorder --- libraries/avatars/src/Player.cpp | 16 ++++------------ libraries/avatars/src/Recording.cpp | 9 +++++++++ libraries/avatars/src/Recording.h | 1 + 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libraries/avatars/src/Player.cpp b/libraries/avatars/src/Player.cpp index 172d43c530..b5cca61461 100644 --- a/libraries/avatars/src/Player.cpp +++ b/libraries/avatars/src/Player.cpp @@ -169,6 +169,8 @@ void Player::setupAudioThread() { _audioThread->setObjectName("Player Audio Thread"); _options.position = _avatar->getPosition(); _options.orientation = _avatar->getOrientation(); + _options.stereo = _recording->numberAudioChannel() == 2; + _injector.reset(new AudioInjector(_recording->getAudioData(), _options), &QObject::deleteLater); _injector->moveToThread(_audioThread); _audioThread->start(); @@ -349,15 +351,7 @@ void Player::setCurrentTime(int currentTime) { } } - _currentFrame = lowestBound; - _timerOffset = _recording->getFrameTimestamp(lowestBound); - - if (isPlaying()) { - _timer.start(); - setAudioInjectorPosition(); - } else { - _pausedFrame = lowestBound; - } + setCurrentFrame(lowestBound); } void Player::setVolume(float volume) { @@ -374,9 +368,7 @@ void Player::setAudioOffset(int audioOffset) { void Player::setAudioInjectorPosition() { int MSEC_PER_SEC = 1000; - int SAMPLE_SIZE = 2; // 16 bits - int CHANNEL_COUNT = 1; - int FRAME_SIZE = SAMPLE_SIZE * CHANNEL_COUNT; + int FRAME_SIZE = sizeof(AudioConstants::AudioSample) * _recording->numberAudioChannel(); int currentAudioFrame = elapsed() * FRAME_SIZE * (AudioConstants::SAMPLE_RATE / MSEC_PER_SEC); _injector->setCurrentSendPosition(currentAudioFrame); } diff --git a/libraries/avatars/src/Recording.cpp b/libraries/avatars/src/Recording.cpp index 7fa8b79bda..6901e5e10d 100644 --- a/libraries/avatars/src/Recording.cpp +++ b/libraries/avatars/src/Recording.cpp @@ -65,6 +65,15 @@ const RecordingFrame& Recording::getFrame(int i) const { return _frames[i]; } + +int Recording::numberAudioChannel() const { + // Check for stereo audio + int MSEC_PER_SEC = 1000; + int channelLength = (getLength() / MSEC_PER_SEC) * + AudioConstants::SAMPLE_RATE * sizeof(AudioConstants::AudioSample); + return glm::round((float)channelLength / (float)getAudioData().size()); +} + void Recording::addFrame(int timestamp, RecordingFrame &frame) { _timestamps << timestamp; _frames << frame; diff --git a/libraries/avatars/src/Recording.h b/libraries/avatars/src/Recording.h index d1da77560c..49d12ec5b5 100644 --- a/libraries/avatars/src/Recording.h +++ b/libraries/avatars/src/Recording.h @@ -56,6 +56,7 @@ public: qint32 getFrameTimestamp(int i) const; const RecordingFrame& getFrame(int i) const; const QByteArray& getAudioData() const { return _audioData; } + int numberAudioChannel() const; protected: void addFrame(int timestamp, RecordingFrame& frame);