mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 17:00:13 +02:00
return an injector from playSound and allow user to stop it
This commit is contained in:
parent
fec2ba71b5
commit
99ee6ae8af
5 changed files with 31 additions and 7 deletions
|
@ -21,6 +21,12 @@
|
||||||
|
|
||||||
#include "AudioInjector.h"
|
#include "AudioInjector.h"
|
||||||
|
|
||||||
|
AudioInjector::AudioInjector(QObject* parent) :
|
||||||
|
QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) :
|
AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) :
|
||||||
_sound(sound),
|
_sound(sound),
|
||||||
_options(injectorOptions)
|
_options(injectorOptions)
|
||||||
|
@ -80,7 +86,7 @@ void AudioInjector::injectAudio() {
|
||||||
int numPreAudioDataBytes = injectAudioPacket.size();
|
int numPreAudioDataBytes = injectAudioPacket.size();
|
||||||
|
|
||||||
// loop to send off our audio in NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL byte chunks
|
// loop to send off our audio in NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL byte chunks
|
||||||
while (currentSendPosition < soundByteArray.size()) {
|
while (currentSendPosition < soundByteArray.size() && !_shouldStop) {
|
||||||
|
|
||||||
int bytesToCopy = std::min(NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL,
|
int bytesToCopy = std::min(NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL,
|
||||||
soundByteArray.size() - currentSendPosition);
|
soundByteArray.size() - currentSendPosition);
|
||||||
|
|
|
@ -24,14 +24,19 @@
|
||||||
class AudioInjector : public QObject {
|
class AudioInjector : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
AudioInjector(QObject* parent);
|
||||||
AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions);
|
AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions);
|
||||||
|
public slots:
|
||||||
|
void injectAudio();
|
||||||
|
void stop() { _shouldStop = true; }
|
||||||
|
signals:
|
||||||
|
void finished();
|
||||||
private:
|
private:
|
||||||
Sound* _sound;
|
Sound* _sound;
|
||||||
AudioInjectorOptions _options;
|
AudioInjectorOptions _options;
|
||||||
public slots:
|
bool _shouldStop;
|
||||||
void injectAudio();
|
|
||||||
signals:
|
|
||||||
void finished();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(AudioInjector*)
|
||||||
|
|
||||||
#endif // hifi_AudioInjector_h
|
#endif // hifi_AudioInjector_h
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
#include "AudioScriptingInterface.h"
|
#include "AudioScriptingInterface.h"
|
||||||
|
|
||||||
void AudioScriptingInterface::playSound(Sound* sound, const AudioInjectorOptions* injectorOptions) {
|
AudioInjector* AudioScriptingInterface::playSound(Sound* sound, const AudioInjectorOptions* injectorOptions) {
|
||||||
|
|
||||||
AudioInjector* injector = new AudioInjector(sound, *injectorOptions);
|
AudioInjector* injector = new AudioInjector(sound, *injectorOptions);
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ void AudioScriptingInterface::playSound(Sound* sound, const AudioInjectorOptions
|
||||||
connect(injectorThread, SIGNAL(finished()), injectorThread, SLOT(deleteLater()));
|
connect(injectorThread, SIGNAL(finished()), injectorThread, SLOT(deleteLater()));
|
||||||
|
|
||||||
injectorThread->start();
|
injectorThread->start();
|
||||||
|
|
||||||
|
return injector;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioScriptingInterface::startDrumSound(float volume, float frequency, float duration, float decay,
|
void AudioScriptingInterface::startDrumSound(float volume, float frequency, float duration, float decay,
|
||||||
|
|
|
@ -20,7 +20,7 @@ const AudioInjectorOptions DEFAULT_INJECTOR_OPTIONS;
|
||||||
class AudioScriptingInterface : public QObject {
|
class AudioScriptingInterface : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public slots:
|
public slots:
|
||||||
static void playSound(Sound* sound, const AudioInjectorOptions* injectorOptions = NULL);
|
static AudioInjector* playSound(Sound* sound, const AudioInjectorOptions* injectorOptions = NULL);
|
||||||
static void startDrumSound(float volume, float frequency, float duration, float decay,
|
static void startDrumSound(float volume, float frequency, float duration, float decay,
|
||||||
const AudioInjectorOptions* injectorOptions = NULL);
|
const AudioInjectorOptions* injectorOptions = NULL);
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <QtNetwork/QNetworkReply>
|
#include <QtNetwork/QNetworkReply>
|
||||||
#include <QScriptEngine>
|
#include <QScriptEngine>
|
||||||
|
|
||||||
|
#include <AudioInjector.h>
|
||||||
#include <AudioRingBuffer.h>
|
#include <AudioRingBuffer.h>
|
||||||
#include <AvatarData.h>
|
#include <AvatarData.h>
|
||||||
#include <CollisionInfo.h>
|
#include <CollisionInfo.h>
|
||||||
|
@ -52,6 +53,14 @@ static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine){
|
||||||
return QScriptValue();
|
return QScriptValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScriptValue injectorToScriptValue(QScriptEngine *engine, AudioInjector* const &in) {
|
||||||
|
return engine->newQObject(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
void injectorFromScriptValue(const QScriptValue &object, AudioInjector* &out) {
|
||||||
|
out = qobject_cast<AudioInjector*>(object.toQObject());
|
||||||
|
}
|
||||||
|
|
||||||
ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNameString,
|
ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNameString,
|
||||||
AbstractControllerScriptingInterface* controllerScriptingInterface) :
|
AbstractControllerScriptingInterface* controllerScriptingInterface) :
|
||||||
|
|
||||||
|
@ -226,6 +235,8 @@ void ScriptEngine::init() {
|
||||||
|
|
||||||
QScriptValue localVoxelsValue = _engine.scriptValueFromQMetaObject<LocalVoxels>();
|
QScriptValue localVoxelsValue = _engine.scriptValueFromQMetaObject<LocalVoxels>();
|
||||||
_engine.globalObject().setProperty("LocalVoxels", localVoxelsValue);
|
_engine.globalObject().setProperty("LocalVoxels", localVoxelsValue);
|
||||||
|
|
||||||
|
qScriptRegisterMetaType(&_engine, injectorToScriptValue, injectorFromScriptValue);
|
||||||
|
|
||||||
registerGlobalObject("Script", this);
|
registerGlobalObject("Script", this);
|
||||||
registerGlobalObject("Audio", &_audioScriptingInterface);
|
registerGlobalObject("Audio", &_audioScriptingInterface);
|
||||||
|
|
Loading…
Reference in a new issue