From 6f7c30e7e2d17ebd6183d990c7bacf5e22fdd786 Mon Sep 17 00:00:00 2001 From: bjorn Date: Wed, 15 May 2019 12:03:49 -0700 Subject: [PATCH] Single-translation-unit experiment; --- CMakeLists.txt | 2 -- src/audio/audio.c | 5 ++++- src/audio/microphone.c | 16 +++++++++++++++- src/audio/microphone.h | 18 +++--------------- src/audio/source.c | 21 +++++++++++++++++++-- src/audio/source.h | 20 +++----------------- 6 files changed, 44 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f4969242..629a7d8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -361,8 +361,6 @@ if(LOVR_ENABLE_AUDIO) add_definitions(-DLOVR_ENABLE_AUDIO) target_sources(lovr PRIVATE src/audio/audio.c - src/audio/microphone.c - src/audio/source.c src/api/audio.c src/api/types/source.c src/api/types/microphone.c diff --git a/src/audio/audio.c b/src/audio/audio.c index a1252d13..ca5f37fe 100644 --- a/src/audio/audio.c +++ b/src/audio/audio.c @@ -9,6 +9,9 @@ #include #include +#include "microphone.c" +#include "source.c" + static struct { bool initialized; ALCdevice* device; @@ -76,7 +79,7 @@ void lovrAudioDestroy() { void lovrAudioUpdate() { int i; Source* source; vec_foreach_rev(&state.sources, source, i) { - if (source->type == SOURCE_STATIC) { + if (lovrSourceGetType(source) == SOURCE_STATIC) { continue; } diff --git a/src/audio/microphone.c b/src/audio/microphone.c index d771af14..c7d6d8da 100644 --- a/src/audio/microphone.c +++ b/src/audio/microphone.c @@ -1,9 +1,23 @@ #include "audio/microphone.h" #include "audio/audio.h" #include "data/soundData.h" +#include "types.h" #include "util.h" +#include +#include -Microphone* lovrMicrophoneInit(Microphone* microphone, const char* name, size_t samples, uint32_t sampleRate, uint32_t bitDepth, uint32_t channelCount) { +struct Microphone { + Ref ref; + ALCdevice* device; + const char* name; + bool isRecording; + uint32_t sampleRate; + uint32_t bitDepth; + uint32_t channelCount; +}; + +Microphone* lovrMicrophoneCreate(const char* name, size_t samples, uint32_t sampleRate, uint32_t bitDepth, uint32_t channelCount) { + Microphone* microphone = lovrAlloc(Microphone); ALCdevice* device = alcCaptureOpenDevice(name, sampleRate, lovrAudioConvertFormat(bitDepth, channelCount), samples); lovrAssert(device, "Error opening capture device for microphone '%s'", name); microphone->device = device; diff --git a/src/audio/microphone.h b/src/audio/microphone.h index 806769fe..361c2ae8 100644 --- a/src/audio/microphone.h +++ b/src/audio/microphone.h @@ -1,25 +1,13 @@ -#include "types.h" #include #include -#include -#include +#include #pragma once struct SoundData; -typedef struct Microphone { - Ref ref; - ALCdevice* device; - const char* name; - bool isRecording; - uint32_t sampleRate; - uint32_t bitDepth; - uint32_t channelCount; -} Microphone; - -Microphone* lovrMicrophoneInit(Microphone* microphone, const char* name, size_t samples, uint32_t sampleRate, uint32_t bitDepth, uint32_t channelCount); -#define lovrMicrophoneCreate(...) lovrMicrophoneInit(lovrAlloc(Microphone), __VA_ARGS__) +typedef struct Microphone Microphone; +Microphone* lovrMicrophoneCreate(const char* name, size_t samples, uint32_t sampleRate, uint32_t bitDepth, uint32_t channelCount); void lovrMicrophoneDestroy(void* ref); uint32_t lovrMicrophoneGetBitDepth(Microphone* microphone); uint32_t lovrMicrophoneGetChannelCount(Microphone* microphone); diff --git a/src/audio/source.c b/src/audio/source.c index 26ec53ea..41af2da4 100644 --- a/src/audio/source.c +++ b/src/audio/source.c @@ -3,8 +3,23 @@ #include "data/audioStream.h" #include "data/soundData.h" #include "lib/maf.h" +#include "types.h" #include #include +#include +#include + +#define SOURCE_BUFFERS 4 + +struct Source { + Ref ref; + SourceType type; + struct SoundData* soundData; + struct AudioStream* stream; + ALuint id; + ALuint buffers[SOURCE_BUFFERS]; + bool isLooping; +}; static ALenum lovrSourceGetState(Source* source) { ALenum state; @@ -12,7 +27,8 @@ static ALenum lovrSourceGetState(Source* source) { return state; } -Source* lovrSourceInitStatic(Source* source, SoundData* soundData) { +Source* lovrSourceCreateStatic(SoundData* soundData) { + Source* source = lovrAlloc(Source); ALenum format = lovrAudioConvertFormat(soundData->bitDepth, soundData->channelCount); source->type = SOURCE_STATIC; source->soundData = soundData; @@ -24,7 +40,8 @@ Source* lovrSourceInitStatic(Source* source, SoundData* soundData) { return source; } -Source* lovrSourceInitStream(Source* source, AudioStream* stream) { +Source* lovrSourceCreateStream(AudioStream* stream) { + Source* source = lovrAlloc(Source); source->type = SOURCE_STREAM; source->stream = stream; alGenSources(1, &source->id); diff --git a/src/audio/source.h b/src/audio/source.h index ecbc0d3b..df39fdd1 100644 --- a/src/audio/source.h +++ b/src/audio/source.h @@ -1,9 +1,6 @@ -#include "types.h" #include #include #include -#include -#include #pragma once @@ -22,20 +19,9 @@ typedef enum { UNIT_SAMPLES } TimeUnit; -typedef struct Source { - Ref ref; - SourceType type; - struct SoundData* soundData; - struct AudioStream* stream; - ALuint id; - ALuint buffers[SOURCE_BUFFERS]; - bool isLooping; -} Source; - -Source* lovrSourceInitStatic(Source* source, struct SoundData* soundData); -Source* lovrSourceInitStream(Source* source, struct AudioStream* stream); -#define lovrSourceCreateStatic(...) lovrSourceInitStatic(lovrAlloc(Source), __VA_ARGS__) -#define lovrSourceCreateStream(...) lovrSourceInitStream(lovrAlloc(Source), __VA_ARGS__) +typedef struct Source Source; +Source* lovrSourceCreateStatic(struct SoundData* soundData); +Source* lovrSourceCreateStream(struct AudioStream* stream); void lovrSourceDestroy(void* ref); SourceType lovrSourceGetType(Source* source); uint32_t lovrSourceGetBitDepth(Source* source);