forked from libpd/libpd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAudioHelpers.m
109 lines (102 loc) · 3.83 KB
/
AudioHelpers.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//
// AudioHelpers.m
// libpd
//
// Created on 18/10/11.
//
// For information on usage and redistribution, and for a DISCLAIMER OF ALL
// WARRANTIES, see the file, "LICENSE.txt," in this distribution.
//
// Updated 2018, 2020 Dan Wilcox <danomatika@gmail.com>
//
#import "AudioHelpers.h"
#import <AudioToolbox/AudioToolbox.h>
#pragma mark Audio Unit / Audio Session Debugging
NSString *AVStatusCodeAsString(OSStatus status) {
switch (status) {
case AVAudioSessionErrorCodeNone:
return @"AVAudioSessionErrorCodeNone";
case AVAudioSessionErrorCodeMediaServicesFailed:
return @"AVAudioSessionErrorCodeMediaServicesFailed";
case AVAudioSessionErrorCodeIsBusy:
return @"AVAudioSessionErrorCodeIsBusy";
case AVAudioSessionErrorCodeIncompatibleCategory:
return @"AVAudioSessionErrorCodeIncompatibleCategory";
case AVAudioSessionErrorCodeCannotInterruptOthers:
return @"AVAudioSessionErrorCodeCannotInterruptOthers";
case AVAudioSessionErrorCodeMissingEntitlement:
return @"AVAudioSessionErrorCodeMissingEntitlement";
case AVAudioSessionErrorCodeSiriIsRecording:
return @"AVAudioSessionErrorCodeSiriIsRecording";
case AVAudioSessionErrorCodeCannotStartPlaying:
return @"AVAudioSessionErrorCodeCannotStartPlaying";
case AVAudioSessionErrorCodeCannotStartRecording:
return @"AVAudioSessionErrorCodeCannotStartRecording";
case AVAudioSessionErrorCodeBadParam:
return @"AVAudioSessionErrorCodeBadParam";
case AVAudioSessionErrorCodeInsufficientPriority:
return @"AVAudioSessionErrorCodeInsufficientPriority";
case AVAudioSessionErrorCodeResourceNotAvailable:
return @"AVAudioSessionErrorCodeResourceNotAvailable";
case AVAudioSessionErrorCodeUnspecified:
return @"AVAudioSessionErrorCodeUnspecified";
case AVAudioSessionErrorCodeExpiredSession:
return @"AVAudioSessionErrorCodeExpiredSession";
case AVAudioSessionErrorCodeSessionNotActive:
return @"AVAudioSessionErrorCodeSessionNotActive";
default:
return [NSString stringWithFormat:@"unknown error code %d", (int)status];
}
}
NSString *AUStatusCodeAsString(OSStatus status) {
switch (status) {
case kAudioUnitErr_InvalidProperty:
return @"kAudioUnitErr_InvalidProperty";
case kAudioUnitErr_InvalidParameter:
return @"kAudioUnitErr_InvalidParameter";
case kAudioUnitErr_InvalidElement:
return @"kAudioUnitErr_InvalidElement";
case kAudioUnitErr_NoConnection:
return @"kAudioUnitErr_NoConnection";
case kAudioUnitErr_FailedInitialization:
return @"kAudioUnitErr_FailedInitialization";
case kAudioUnitErr_TooManyFramesToProcess:
return @"kAudioUnitErr_TooManyFramesToProcess";
case kAudioUnitErr_InvalidFile:
return @"kAudioUnitErr_InvalidFile";
case kAudioUnitErr_FormatNotSupported:
return @"kAudioUnitErr_FormatNotSupported";
case kAudioUnitErr_Uninitialized:
return @"kAudioUnitErr_Uninitialized";
case kAudioUnitErr_InvalidScope:
return @"kAudioUnitErr_InvalidScope";
case kAudioUnitErr_PropertyNotWritable:
return @"kAudioUnitErr_PropertyNotWritable";
case kAudioUnitErr_CannotDoInCurrentContext:
return @"kAudioUnitErr_CannotDoInCurrentContext";
case kAudioUnitErr_InvalidPropertyValue:
return @"kAudioUnitErr_InvalidPropertyValue";
case kAudioUnitErr_PropertyNotInUse:
return @"kAudioUnitErr_PropertyNotInUse";
case kAudioUnitErr_Initialized:
return @"kAudioUnitErr_Initialized";
case kAudioUnitErr_InvalidOfflineRender:
return @"kAudioUnitErr_InvalidOfflineRender";
case kAudioUnitErr_Unauthorized:
return @"kAudioUnitErr_Unauthorized";
default:
return [NSString stringWithFormat:@"unknown error code %d", (int)status];
}
}
#pragma mark Math Helpers
BOOL floatsAreEqual(Float64 f1, Float64 f2) {
return ((fabs(f1 - f2) < 0.0001) ? YES : NO);
}
// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious
int log2int(int x) {
int y = 0;
while (x >>= 1) {
++y;
}
return y;
}