From a99c7576529d484eb7ed7254a99f52f857c35d0b Mon Sep 17 00:00:00 2001 From: Raidho Date: Tue, 25 Oct 2016 02:39:39 +0300 Subject: [PATCH] made :getData produce SoundData directly moved SoundData::load back to private --HG-- branch : minor-mic-input --- src/modules/audio/RecordingDevice.h | 5 +-- src/modules/audio/null/RecordingDevice.cpp | 4 +- src/modules/audio/null/RecordingDevice.h | 2 +- src/modules/audio/openal/RecordingDevice.cpp | 16 +++---- src/modules/audio/openal/RecordingDevice.h | 2 +- src/modules/audio/wrap_RecordingDevice.cpp | 46 +++++++++----------- src/modules/sound/SoundData.h | 3 +- 7 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/modules/audio/RecordingDevice.h b/src/modules/audio/RecordingDevice.h index ac2d9150c..83af9580e 100644 --- a/src/modules/audio/RecordingDevice.h +++ b/src/modules/audio/RecordingDevice.h @@ -60,10 +60,9 @@ public: /** * Retreives recorded data. - * @param soundData Reference to a SoundData to fill. - * @return number of samples obtained from device. + * @return SoundData containing data obtained from recording device. **/ - virtual int getData(love::sound::SoundData *soundData) = 0; + virtual love::sound::SoundData *getData() = 0; /** * @return C string device name. diff --git a/src/modules/audio/null/RecordingDevice.cpp b/src/modules/audio/null/RecordingDevice.cpp index 9e62b4168..f68f08903 100644 --- a/src/modules/audio/null/RecordingDevice.cpp +++ b/src/modules/audio/null/RecordingDevice.cpp @@ -52,9 +52,9 @@ void RecordingDevice::stopRecording() { } -int RecordingDevice::getData(love::sound::SoundData*) +love::sound::SoundData *RecordingDevice::getData() { - return 0; + return nullptr; } int RecordingDevice::getSampleCount() const diff --git a/src/modules/audio/null/RecordingDevice.h b/src/modules/audio/null/RecordingDevice.h index 8fcb1bdad..da5e14ec1 100644 --- a/src/modules/audio/null/RecordingDevice.h +++ b/src/modules/audio/null/RecordingDevice.h @@ -39,7 +39,7 @@ public: virtual bool startRecording(); virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels); virtual void stopRecording(); - virtual int getData(love::sound::SoundData *soundData); + virtual love::sound::SoundData *getData(); virtual const char *getName() const; virtual int getID() const; virtual int getSampleCount() const; diff --git a/src/modules/audio/openal/RecordingDevice.cpp b/src/modules/audio/openal/RecordingDevice.cpp index b8d29f27c..5e9eba7f2 100644 --- a/src/modules/audio/openal/RecordingDevice.cpp +++ b/src/modules/audio/openal/RecordingDevice.cpp @@ -20,6 +20,7 @@ #include "RecordingDevice.h" #include "Audio.h" +#include "sound/Sound.h" namespace love { @@ -28,6 +29,8 @@ namespace audio namespace openal { +#define soundInstance() (Module::getInstance(Module::M_SOUND)) + class InvalidFormatException : public love::Exception { public: @@ -99,23 +102,20 @@ void RecordingDevice::stopRecording() device = nullptr; } -int RecordingDevice::getData(love::sound::SoundData *soundData) +love::sound::SoundData *RecordingDevice::getData() { if (!isRecording()) - return 0; + return nullptr; int samples = getSampleCount(); if (samples == 0) - return 0; + return nullptr; - //reinitialize soundData if necessary - if (samples != soundData->getSampleCount() || sampleRate != soundData->getSampleRate() || - bitDepth != soundData->getBitDepth() || channels != soundData->getChannels()) - soundData->load(samples, sampleRate, bitDepth, channels); + love::sound::SoundData *soundData = soundInstance()->newSoundData(samples, sampleRate, bitDepth, channels); alcCaptureSamples(device, soundData->getData(), samples); - return samples; + return soundData; } int RecordingDevice::getSampleCount() const diff --git a/src/modules/audio/openal/RecordingDevice.h b/src/modules/audio/openal/RecordingDevice.h index 3e4ae14ca..00488a8f4 100644 --- a/src/modules/audio/openal/RecordingDevice.h +++ b/src/modules/audio/openal/RecordingDevice.h @@ -52,7 +52,7 @@ public: virtual bool startRecording(); virtual bool startRecording(int samples, int sampleRate, int bitDepth, int channels); virtual void stopRecording(); - virtual int getData(love::sound::SoundData *soundData); + virtual love::sound::SoundData *getData(); virtual const char *getName() const; virtual int getID() const; virtual int getSampleCount() const; diff --git a/src/modules/audio/wrap_RecordingDevice.cpp b/src/modules/audio/wrap_RecordingDevice.cpp index b78dc3bc1..256ef7e5a 100644 --- a/src/modules/audio/wrap_RecordingDevice.cpp +++ b/src/modules/audio/wrap_RecordingDevice.cpp @@ -22,10 +22,6 @@ #include "wrap_Audio.h" #include "sound/SoundData.h" -#include "sound/Sound.h" - -#define soundInstance() (Module::getInstance(Module::M_SOUND)) - namespace love { namespace audio @@ -59,43 +55,41 @@ int w_RecordingDevice_startRecording(lua_State *L) int w_RecordingDevice_stopRecording(lua_State *L) { RecordingDevice *d = luax_checkrecordingdevice(L, 1); - int samples = d->getSampleCount(); - if (samples == 0) - { - lua_pushnil(L); - return 1; - } - love::sound::SoundData *s = nullptr; + luax_catchexcept(L, [&](){ - s = soundInstance()->newSoundData(samples, d->getSampleRate(), d->getBitDepth(), d->getChannels()); - d->getData(s); + s = d->getData(); d->stopRecording(); }); - luax_pushtype(L, SOUND_SOUND_DATA_ID, s); - s->release(); + if (s != nullptr) + { + luax_pushtype(L, SOUND_SOUND_DATA_ID, s); + s->release(); + } + else + lua_pushnil(L); + return 1; } int w_RecordingDevice_getData(lua_State *L) { RecordingDevice *d = luax_checkrecordingdevice(L, 1); - int samples = d->getSampleCount(); - if (samples == 0) - { - lua_pushnil(L); - return 1; - } - love::sound::SoundData *s = nullptr; + luax_catchexcept(L, [&](){ - s = soundInstance()->newSoundData(samples, d->getSampleRate(), d->getBitDepth(), d->getChannels()); - d->getData(s); + s = d->getData(); }); - luax_pushtype(L, SOUND_SOUND_DATA_ID, s); - s->release(); + if (s != nullptr) + { + luax_pushtype(L, SOUND_SOUND_DATA_ID, s); + s->release(); + } + else + lua_pushnil(L); + return 1; } diff --git a/src/modules/sound/SoundData.h b/src/modules/sound/SoundData.h index 821fb291e..07b13c2d3 100644 --- a/src/modules/sound/SoundData.h +++ b/src/modules/sound/SoundData.h @@ -54,10 +54,11 @@ public: void setSample(int i, float sample); float getSample(int i) const; - void load(int samples, int sampleRate, int bitDepth, int channels, void *newData = 0); private: + void load(int samples, int sampleRate, int bitDepth, int channels, void *newData = 0); + uint8 *data; size_t size;