this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at vchroot 110 lines 2.5 kB view raw
1#include "darling-config.h" 2#include "AUComponent.h" 3#include "AudioUnitALSA.h" 4#include "AudioUnitPA.h" 5#include <util/debug.h> 6#include <alsa/asoundlib.h> 7#include <CoreServices/MacErrors.h> 8 9AudioComponent AudioComponentFindNext(AudioComponent inAComponent, AudioComponentDescription *inDesc) 10{ 11 TRACE2(inAComponent, inDesc); 12 13 int index = -1; 14 15 if (inDesc->componentType != kAudioUnitType_Output && inDesc->componentType != kAudioUnitType_Mixer) 16 return nullptr; 17 18 if (inAComponent != nullptr) 19 index = GetComponentIndex(inAComponent); 20 21 if (snd_card_next(&index) || index == -1) 22 return nullptr; 23 24 return CreateComponent(kComponentTypeAudioUnit, index); 25} 26 27OSStatus AudioComponentGetDescription(AudioComponent inComponent, AudioComponentDescription *outDesc) 28{ 29 if (!outDesc) 30 return paramErr; 31 32 memset(outDesc, 0, sizeof(*outDesc)); 33 outDesc->componentType = kAudioUnitType_Output; 34 35 return noErr; 36} 37 38OSStatus AudioComponentGetVersion(AudioComponent inComponent, UInt32 *outVersion) 39{ 40 *outVersion = 0; 41 return noErr; 42} 43 44Boolean AudioComponentInstanceCanDo(AudioComponentInstance inInstance, SInt16 inSelectorID) 45{ 46 return true; 47} 48 49OSStatus AudioComponentInstanceDispose(AudioComponentInstance inInstance) 50{ 51 TRACE1(inInstance); 52 53 delete inInstance; 54 return noErr; 55} 56 57AudioComponent AudioComponentInstanceGetComponent(AudioComponentInstance inInstance) 58{ 59 return CreateComponent(kComponentTypeAudioUnit, static_cast<AudioOutputUnitComponent*>(inInstance)->cardIndex()); 60} 61 62OSStatus AudioComponentInstanceNew(AudioComponent inComponent, AudioComponentInstance *outInstance) 63{ 64 TRACE1(inComponent); 65 66#if defined(ENABLE_PULSEAUDIO) 67 *outInstance = new AudioUnitPA; 68#elif defined(ENABLE_ALSA) 69 *outInstance = AudioUnitALSA::create(GetComponentIndex(inComponent)); 70#else 71 *outInstance = nullptr; 72 return unimpErr; 73#endif 74 return *outInstance ? noErr : paramErr; 75} 76 77OSStatus AudioComponentCopyName(AudioComponent inComponent, CFStringRef *outName) 78{ 79 int index = GetComponentIndex(inComponent); 80 char* name; 81 82 if (!outName) 83 return paramErr; 84 85 if (snd_card_get_longname(index, &name)) 86 return paramErr; 87 88 *outName = CFStringCreateWithCString(nullptr, name, kCFStringEncodingUTF8); 89 free(name); 90 91 return noErr; 92} 93 94UInt32 AudioComponentCount(AudioComponentDescription *inDesc) 95{ 96 UInt32 count = 0; 97 int index = -1; 98 99 // Is there a better way? 100 do 101 { 102 snd_card_next(&index); 103 if (index != -1) 104 count++; 105 } 106 while (index != -1); 107 108 return count; 109} 110