From 576b19938220c5e18d8ab30be0a5bd315ead8bc2 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Wed, 26 Mar 2025 19:06:02 -0700 Subject: [PATCH] Bug Fix: Fix output logging, switch log method Output logging, a debugging feature that is only enabled at build time if I need to chase down some audio mixing or output bug, was not logging anything at all. Change to use Cocoa file writing methods, and actually implement the output writer function again. This code is left disabled 99% of the time anyway, and especially in release builds. Like the node logging code elsewhere, it has the potential to be very noisy and consume massive amounts of disk space. Signed-off-by: Christopher Snowhill --- Audio/Output/OutputCoreAudio.h | 5 +---- Audio/Output/OutputCoreAudio.m | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Audio/Output/OutputCoreAudio.h b/Audio/Output/OutputCoreAudio.h index 97a536069..6caa452cd 100644 --- a/Audio/Output/OutputCoreAudio.h +++ b/Audio/Output/OutputCoreAudio.h @@ -28,9 +28,6 @@ using std::atomic_long; #import //#define OUTPUT_LOG -#ifdef OUTPUT_LOG -#import -#endif @class OutputNode; @@ -102,7 +99,7 @@ using std::atomic_long; ChunkList *outputBuffer; #ifdef OUTPUT_LOG - FILE *_logFile; + NSFileHandle *_logFile; #endif } diff --git a/Audio/Output/OutputCoreAudio.m b/Audio/Output/OutputCoreAudio.m index a1d1ce12a..96841cb6f 100644 --- a/Audio/Output/OutputCoreAudio.m +++ b/Audio/Output/OutputCoreAudio.m @@ -19,6 +19,10 @@ #import +#ifdef OUTPUT_LOG +#import +#endif + extern void scale_by_volume(float *buffer, size_t count, float volume); static NSString *CogPlaybackDidBeginNotificiation = @"CogPlaybackDidBeginNotificiation"; @@ -146,7 +150,7 @@ static void *kOutputCoreAudioContext = &kOutputCoreAudioContext; #ifdef OUTPUT_LOG NSString *logName = [NSTemporaryDirectory() stringByAppendingPathComponent:@"CogAudioLog.raw"]; - _logFile = fopen([logName UTF8String], "wb"); + _logFile = [NSFileHandle fileHandleForWritingAtPath:logName createFile:YES]; #endif } @@ -648,7 +652,7 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons __block NSMutableArray *faders = self->fadedBuffers; #ifdef OUTPUT_LOG - __block FILE *logFile = _logFile; + __block NSFileHandle *logFile = _logFile; #endif _au.outputProvider = ^AUAudioUnitStatus(AudioUnitRenderActionFlags *_Nonnull actionFlags, const AudioTimeStamp *_Nonnull timestamp, AUAudioFrameCount frameCount, NSInteger inputBusNumber, AudioBufferList *_Nonnull inputData) { @@ -742,6 +746,11 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons scale_by_volume(outSamples, frameCount * channels, volumeScale * _self->volume); [_self updateLatency:secondsRendered]; + +#ifdef OUTPUT_LOG + NSData *outData = [NSData dataWithBytes:outSamples length:frameCount * format->mBytesPerPacket]; + [logFile writeData:outData]; +#endif } #ifdef _DEBUG @@ -924,7 +933,7 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons } #ifdef OUTPUT_LOG if(_logFile) { - fclose(_logFile); + [_logFile closeFile]; _logFile = NULL; } #endif