From 96984b9c70e8c3cde84b70b18bdf2d38808d8149 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 14 Apr 2019 10:38:26 +0200 Subject: WIP --- drumgizmo/output/coreaudio.h | 56 ++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 39 deletions(-) (limited to 'drumgizmo/output/coreaudio.h') diff --git a/drumgizmo/output/coreaudio.h b/drumgizmo/output/coreaudio.h index 731ba47..69b371f 100644 --- a/drumgizmo/output/coreaudio.h +++ b/drumgizmo/output/coreaudio.h @@ -26,14 +26,15 @@ */ #pragma once +#include + #include -#include -#include -#include -#include #include "audiooutputengine.h" +struct AudioTimeStamp; +struct AudioBufferList; + class CoreAudioOutputEngine : public AudioOutputEngine { @@ -41,48 +42,25 @@ public: CoreAudioOutputEngine(); ~CoreAudioOutputEngine(); - // based on AudioOutputEngine + // From AudioOutputEngine: bool init(const Channels& chan) override; void setParm(const std::string& parm, const std::string& value) override; bool start() override; void stop() override; - void pre(size_t nsamples) override; - void run(int ch, sample_t* samples, size_t nsamples) override; - void post(size_t nsamples) override; + void pre(std::size_t nsamples) override; + void run(int ch, sample_t* samples, std::size_t nsamples) override; + void post(std::size_t nsamples) override; size_t getSamplerate() const override; + std::size_t getBufferSize() const override; bool isFreewheeling() const override; private: - AudioDeviceID device_id{kAudioDeviceUnknown}; - std::string id; - std::uint32_t frames{1024u}; - std::uint32_t samplerate{44100u}; - AudioUnit au_hal; - AudioBufferList* input_list; - - // libao: -static OSStatus audioCallback (void *inRefCon, - AudioUnitRenderActionFlags *inActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList *ioData); - - AudioDeviceID outputDevice; - ComponentInstance outputAudioUnit; - int output_p; - - /* Keep track of whether the output stream has actually been - started/stopped */ - Boolean started; - Boolean isStopping; - - /* Our internal queue of samples waiting to be consumed by - CoreAudio */ - void *buffer; - unsigned int bufferByteCount; - unsigned int firstValidByteOffset; - unsigned int validByteCount; + std::unique_ptr raii; - unsigned int buffer_time; + static int render(void *user_data, + std::uint32_t *action_flags, + const AudioTimeStamp *timestamp, + std::uint32_t bus_number, + std::uint32_t number_frames, + AudioBufferList *io_data); }; -- cgit v1.2.3