provide old ASI APIs in AudioInjector

This commit is contained in:
Stephen Birarda 2015-02-11 15:57:32 -08:00
parent 7b485829c4
commit 0498c5c708
2 changed files with 35 additions and 40 deletions

View file

@ -34,35 +34,20 @@ void injectorFromScriptValue(const QScriptValue& object, AudioInjector*& out) {
}
AudioInjector::AudioInjector(QObject* parent) :
QObject(parent),
_options(),
_shouldStop(false),
_loudness(0.0f),
_isFinished(false),
_currentSendPosition(0),
_localBuffer(NULL)
QObject(parent)
{
}
AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) :
_audioData(sound->getByteArray()),
_options(injectorOptions),
_shouldStop(false),
_loudness(0.0f),
_isFinished(false),
_currentSendPosition(0),
_localBuffer(NULL)
_options(injectorOptions)
{
}
AudioInjector::AudioInjector(const QByteArray& audioData, const AudioInjectorOptions& injectorOptions) :
_audioData(audioData),
_options(injectorOptions),
_shouldStop(false),
_loudness(0.0f),
_isFinished(false),
_currentSendPosition(0),
_localBuffer(NULL)
_options(injectorOptions)
{
}
@ -83,21 +68,25 @@ float AudioInjector::getLoudness() {
void AudioInjector::injectAudio() {
// check if we need to offset the sound by some number of seconds
if (_options.secondOffset > 0.0f) {
if (!_isStarted) {
// check if we need to offset the sound by some number of seconds
if (_options.secondOffset > 0.0f) {
// convert the offset into a number of bytes
int byteOffset = (int) floorf(AudioConstants::SAMPLE_RATE * _options.secondOffset * (_options.stereo ? 2.0f : 1.0f));
byteOffset *= sizeof(int16_t);
_currentSendPosition = byteOffset;
}
// convert the offset into a number of bytes
int byteOffset = (int) floorf(AudioConstants::SAMPLE_RATE * _options.secondOffset * (_options.stereo ? 2.0f : 1.0f));
byteOffset *= sizeof(int16_t);
_currentSendPosition = byteOffset;
}
if (_options.localOnly) {
injectLocally();
if (_options.localOnly) {
injectLocally();
} else {
injectToMixer();
}
} else {
injectToMixer();
}
qDebug() << "AudioInjector::injectAudio called but already started.";
}
}
void AudioInjector::injectLocally() {

View file

@ -43,25 +43,31 @@ public:
public slots:
void injectAudio();
void stop();
void stopAndDeleteLater();
void setOptions(AudioInjectorOptions& options);
void setCurrentSendPosition(int currentSendPosition) { _currentSendPosition = currentSendPosition; }
float getLoudness();
float getLoudness() const;
bool isPlaying() const { return !_isFinished; }
signals:
void finished();
private slots:
void stopAndDeleteLater();
private:
void injectToMixer();
void injectLocally();
QByteArray _audioData;
AudioInjectorOptions _options;
bool _shouldStop;
float _loudness;
bool _isFinished;
int _currentSendPosition;
AbstractAudioInterface* _localAudioInterface;
AudioInjectorLocalBuffer* _localBuffer;
bool _shouldStop = false;
float _loudness = 0.0f;
bool _isStarted = false;
bool _isFinished = false;
int _currentSendPosition = 0;
AbstractAudioInterface* _localAudioInterface = NULL;
AudioInjectorLocalBuffer* _localBuffer = NULL;
friend QScriptValue injectorToScriptValue(QScriptEngine* engine, AudioInjector* const& in);
};
Q_DECLARE_METATYPE(AudioInjector*)