From d083e75d2d44a2ca758c87f497a35662ac0066af Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Nov 2014 09:59:10 -0800 Subject: [PATCH] groundwork for better locally looped audio --- interface/src/Audio.cpp | 20 ++++--------------- interface/src/Audio.h | 2 +- libraries/audio/src/AbstractAudioInterface.h | 3 ++- .../audio/src/AudioScriptingInterface.cpp | 12 ----------- libraries/audio/src/AudioScriptingInterface.h | 1 - 5 files changed, 7 insertions(+), 31 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 726d1e609a..3289e64ed4 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -1334,22 +1334,10 @@ void Audio::startDrumSound(float volume, float frequency, float duration, float _drumSoundSample = 0; } -void Audio::handleAudioByteArray(const QByteArray& audioByteArray, const AudioInjectorOptions& injectorOptions) { - if (audioByteArray.size() > 0) { - QAudioFormat localFormat = _outputFormat; - - if (!injectorOptions.isStereo()) { - localFormat.setChannelCount(1); - } - - QAudioOutput* localSoundOutput = new QAudioOutput(getNamedAudioDeviceForMode(QAudio::AudioOutput, _outputAudioDeviceName), localFormat, this); - - QIODevice* localIODevice = localSoundOutput->start(); - qDebug() << "Writing" << audioByteArray.size() << "to" << localIODevice; - localIODevice->write(audioByteArray); - } else { - qDebug() << "Audio::handleAudioByteArray called with an empty byte array. Sound is likely still downloading."; - } +QAudioOutput* Audio::newLocalOutputInterface(bool isStereo) { + QAudioFormat localFormat = _outputFormat; + localFormat.setChannelCount(isStereo ? 2 : 1); + return new QAudioOutput(getNamedAudioDeviceForMode(QAudio::AudioOutput, _outputAudioDeviceName), localFormat); } void Audio::renderToolBox(int x, int y, bool boxed) { diff --git a/interface/src/Audio.h b/interface/src/Audio.h index ecbef026c4..02ea6db498 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -155,7 +155,7 @@ public slots: void selectAudioFilterBassCut(); void selectAudioFilterSmiley(); - virtual void handleAudioByteArray(const QByteArray& audioByteArray, const AudioInjectorOptions& options); + virtual QAudioOutput* newLocalOutputInterface(bool isStereo); void sendDownstreamAudioStatsPacket(); diff --git a/libraries/audio/src/AbstractAudioInterface.h b/libraries/audio/src/AbstractAudioInterface.h index 1ee71ee32d..82710277b3 100644 --- a/libraries/audio/src/AbstractAudioInterface.h +++ b/libraries/audio/src/AbstractAudioInterface.h @@ -13,6 +13,7 @@ #define hifi_AbstractAudioInterface_h #include +#include #include "AudioInjectorOptions.h" @@ -24,7 +25,7 @@ public: virtual void startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen) = 0; virtual void startDrumSound(float volume, float frequency, float duration, float decay) = 0; public slots: - virtual void handleAudioByteArray(const QByteArray& audioByteArray, const AudioInjectorOptions& options) = 0; + virtual QAudioOutput* newLocalOutputInterface(bool isStereo) = 0; }; Q_DECLARE_METATYPE(AbstractAudioInterface*) diff --git a/libraries/audio/src/AudioScriptingInterface.cpp b/libraries/audio/src/AudioScriptingInterface.cpp index 33afcdb095..318db1871b 100644 --- a/libraries/audio/src/AudioScriptingInterface.cpp +++ b/libraries/audio/src/AudioScriptingInterface.cpp @@ -37,18 +37,6 @@ void AudioScriptingInterface::stopAllInjectors() { } } -void AudioScriptingInterface::playLocalSound(Sound* sound, const AudioInjectorOptions* injectorOptions) { - if (sound->isStereo()) { - const_cast(injectorOptions)->setIsStereo(true); - } - - // assume that localAudioInterface could be on a separate thread, use Qt::AutoConnection to handle properly - QMetaObject::invokeMethod(_localLoopbackInterface, "handleAudioByteArray", - Qt::AutoConnection, - Q_ARG(QByteArray, sound->getByteArray()), - Q_ARG(const AudioInjectorOptions&, *injectorOptions)); -} - AudioInjector* AudioScriptingInterface::playSound(Sound* sound, const AudioInjectorOptions* injectorOptions) { if (sound->isStereo()) { diff --git a/libraries/audio/src/AudioScriptingInterface.h b/libraries/audio/src/AudioScriptingInterface.h index 5cd0f9e99a..ffbef646ec 100644 --- a/libraries/audio/src/AudioScriptingInterface.h +++ b/libraries/audio/src/AudioScriptingInterface.h @@ -32,7 +32,6 @@ public slots: static float getLoudness(AudioInjector* injector); - void playLocalSound(Sound *sound, const AudioInjectorOptions* injectorOptions = NULL); AudioInjector* playSound(Sound* sound, const AudioInjectorOptions* injectorOptions = NULL); void stopInjector(AudioInjector* injector);