diff --git a/src/modules/audio/RecordingDevice.h b/src/modules/audio/RecordingDevice.h index 17345e7df..e56fb2043 100644 --- a/src/modules/audio/RecordingDevice.h +++ b/src/modules/audio/RecordingDevice.h @@ -37,15 +37,14 @@ public: static love::Type type; + static const int DEFAULT_SAMPLES = 8192; + static const int DEFAULT_SAMPLE_RATE = 8000; + static const int DEFAULT_BIT_DEPTH = 16; + static const int DEFAULT_CHANNELS = 1; + RecordingDevice(); virtual ~RecordingDevice(); - /** - * Begins audio input recording process. using default (previous) parameters. - * @return True if recording started successfully. - **/ - virtual bool start() = 0; - /** * Begins audio input recording process. * @param samples Number of samples to buffer. @@ -96,6 +95,7 @@ public: * @return True if currently recording. **/ virtual bool isRecording() const = 0; + }; //RecordingDevice } //audio diff --git a/src/modules/audio/null/RecordingDevice.cpp b/src/modules/audio/null/RecordingDevice.cpp index 5ca3a7280..f640993c9 100644 --- a/src/modules/audio/null/RecordingDevice.cpp +++ b/src/modules/audio/null/RecordingDevice.cpp @@ -38,11 +38,6 @@ RecordingDevice::~RecordingDevice() { } -bool RecordingDevice::start() -{ - return false; -} - bool RecordingDevice::start(int, int, int, int) { return false; diff --git a/src/modules/audio/null/RecordingDevice.h b/src/modules/audio/null/RecordingDevice.h index 67d92c1f5..85d5f2cd8 100644 --- a/src/modules/audio/null/RecordingDevice.h +++ b/src/modules/audio/null/RecordingDevice.h @@ -36,7 +36,6 @@ class RecordingDevice : public love::audio::RecordingDevice public: RecordingDevice(const char *name); virtual ~RecordingDevice(); - virtual bool start(); virtual bool start(int samples, int sampleRate, int bitDepth, int channels); virtual void stop(); virtual love::sound::SoundData *getData(); diff --git a/src/modules/audio/openal/RecordingDevice.cpp b/src/modules/audio/openal/RecordingDevice.cpp index b8997f41a..cdc646e4f 100644 --- a/src/modules/audio/openal/RecordingDevice.cpp +++ b/src/modules/audio/openal/RecordingDevice.cpp @@ -56,19 +56,8 @@ RecordingDevice::~RecordingDevice() alcCaptureCloseDevice(device); } -bool RecordingDevice::start() -{ - return start(samples, sampleRate, bitDepth, channels); -} - bool RecordingDevice::start(int samples, int sampleRate, int bitDepth, int channels) { - if (isRecording()) - { - alcCaptureStop(device); - alcCaptureCloseDevice(device); - } - ALenum format = Audio::getFormat(bitDepth, channels); if (format == AL_NONE) throw InvalidFormatException(channels, bitDepth); @@ -79,15 +68,20 @@ bool RecordingDevice::start(int samples, int sampleRate, int bitDepth, int chann if (sampleRate <= 0) throw love::Exception("Invalid sample rate."); + if (isRecording()) + stop(); + device = alcCaptureOpenDevice(name.c_str(), sampleRate, format, samples); if (device == nullptr) return false; alcCaptureStart(device); + this->samples = samples; this->sampleRate = sampleRate; this->bitDepth = bitDepth; this->channels = channels; + return true; } diff --git a/src/modules/audio/openal/RecordingDevice.h b/src/modules/audio/openal/RecordingDevice.h index 407e515b6..99a9d2137 100644 --- a/src/modules/audio/openal/RecordingDevice.h +++ b/src/modules/audio/openal/RecordingDevice.h @@ -49,9 +49,9 @@ namespace openal class RecordingDevice : public love::audio::RecordingDevice { public: + RecordingDevice(const char *name); virtual ~RecordingDevice(); - virtual bool start(); virtual bool start(int samples, int sampleRate, int bitDepth, int channels); virtual void stop(); virtual love::sound::SoundData *getData(); @@ -63,12 +63,15 @@ public: virtual bool isRecording() const; private: - int samples = 8192; - int sampleRate = 8000; - int bitDepth = 16; - int channels = 1; + + int samples = 0; + int sampleRate = 0; + int bitDepth = 0; + int channels = 0; + std::string name; ALCdevice *device = nullptr; + }; //RecordingDevice } //openal diff --git a/src/modules/audio/wrap_RecordingDevice.cpp b/src/modules/audio/wrap_RecordingDevice.cpp index e52e1e3b7..dce415cf2 100644 --- a/src/modules/audio/wrap_RecordingDevice.cpp +++ b/src/modules/audio/wrap_RecordingDevice.cpp @@ -35,18 +35,15 @@ RecordingDevice *luax_checkrecordingdevice(lua_State *L, int idx) int w_RecordingDevice_start(lua_State *L) { RecordingDevice *d = luax_checkrecordingdevice(L, 1); - if (lua_gettop(L) > 1) - { - int samples = (int) luaL_checkinteger(L, 2); - int sampleRate = (int) luaL_checkinteger(L, 3); - int bitDepth = (int) luaL_checkinteger(L, 4); - int channels = (int) luaL_checkinteger(L, 5); - luax_catchexcept(L, [&](){ - lua_pushboolean(L, d->start(samples, sampleRate, bitDepth, channels)); - }); - } - else - luax_catchexcept(L, [&](){ lua_pushboolean(L, d->start()); }); + + int samples = (int) luaL_optinteger(L, 2, RecordingDevice::DEFAULT_SAMPLES); + int sampleRate = (int) luaL_optinteger(L, 3, RecordingDevice::DEFAULT_SAMPLE_RATE); + int bitDepth = (int) luaL_optinteger(L, 4, RecordingDevice::DEFAULT_BIT_DEPTH); + int channels = (int) (int) luaL_optinteger(L, 5, RecordingDevice::DEFAULT_CHANNELS); + + luax_catchexcept(L, [&](){ + lua_pushboolean(L, d->start(samples, sampleRate, bitDepth, channels)); + }); return 1; }