this repo has no description
1#ifndef AUDIOUNITBASE_H
2#define AUDIOUNITBASE_H
3
4#include "AudioUnit.h"
5#include "AudioUnitProperties.h"
6#include <vector>
7#include <set>
8#include <mutex>
9#include <CoreFoundation/CFString.h>
10#include <CoreServices/ComponentsInternal.h>
11
12class AudioUnitComponent : public CarbonComponent
13{
14protected:
15 AudioUnitComponent(std::initializer_list<CFStringRef> elements);
16public:
17 virtual ~AudioUnitComponent();
18
19 virtual OSStatus init() = 0;
20 virtual OSStatus deinit() = 0;
21
22 virtual OSStatus reset(AudioUnitScope inScope, AudioUnitElement inElement) = 0;
23
24 virtual OSStatus render(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) = 0;
25
26 virtual OSStatus setProperty(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, const void* data, UInt32 dataSize);
27 virtual OSStatus getProperty(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, void* data, UInt32* dataSize);
28 virtual OSStatus getPropertyInfo(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, UInt32* dataSize, Boolean* writable);
29
30 OSStatus addRenderNotify(AURenderCallback inProc, void* opaque);
31 OSStatus removeRenderNotify(AURenderCallback inProc, void* opaque);
32 OSStatus notifyListeners(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData);
33protected:
34 std::vector<CFStringRef> m_elementNames;
35 std::vector<std::pair<AudioStreamBasicDescription, AudioStreamBasicDescription>> m_config;
36 //AudioStreamBasicDescription m_configOutputPlayback, m_configInputPlayback, m_configInputCapture, m_configOutputCapture;
37 AudioUnitConnection m_inputUnit;
38 bool m_shouldAllocateBuffer = true;
39 OSStatus m_lastRenderError = 0;
40 CFStringRef m_contextName = nullptr;
41 std::mutex m_listenersMutex;
42 std::set<std::pair<AURenderCallback, void*>> m_listeners;
43};
44
45#endif
46