cog/Audio/Utils/BadSampleCleaner.m

41 lines
938 B
Objective-C

//
// BadSampleCleaner.m
// CogAudio Framework
//
// Created by Christopher Snowhill on 2/15/22.
//
#ifdef _DEBUG
#import "BadSampleCleaner.h"
#import "Logging.h"
@implementation BadSampleCleaner
+ (void)cleanSamples:(float *)buffer amount:(NSUInteger)amount location:(NSString *)location {
BOOL hadNaN = NO;
BOOL hadINF = NO;
BOOL hadHUGE = NO;
for(NSUInteger i = 0; i < amount; ++i) {
float sample = buffer[i];
BOOL isNaN = isnan(sample);
BOOL isINF = isinf(sample);
BOOL isHUGE = (fabs(sample) > 2.0);
hadNaN = hadNaN || isNaN;
hadINF = hadINF || isINF;
hadHUGE = hadHUGE || isHUGE;
if(isNaN || isINF || isHUGE) {
memset(&buffer[i], 0, sizeof(buffer[i]));
memset(&sample, 0, sizeof(sample));
}
}
if(hadNaN || hadINF || hadHUGE) {
DLog(@"Sample block at %@ had NaN: %@, INF: %@, HUGE: %@", location, hadNaN ? @"yes" : @"no", hadINF ? @"yes" : @"no", hadHUGE ? @"yes" : @"no");
}
}
@end
#endif