Fix Core Audio input to report and decode format native bits per sample, and report file bitrate

CQTexperiment
Christopher Snowhill 2021-02-22 20:48:23 -08:00
parent 9f337dc41c
commit 04074f5d74
2 changed files with 28 additions and 4 deletions

View File

@ -20,6 +20,7 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#include <AudioToolbox/AudioFile.h>
#include <AudioToolbox/ExtendedAudioFile.h> #include <AudioToolbox/ExtendedAudioFile.h>
#import "Plugin.h" #import "Plugin.h"

View File

@ -126,6 +126,7 @@ static SInt64 getSizeProc(void* clientData) {
OSStatus err; OSStatus err;
UInt32 size; UInt32 size;
AudioStreamBasicDescription asbd; AudioStreamBasicDescription asbd;
AudioFileID afi;
// Get input file information // Get input file information
size = sizeof(asbd); size = sizeof(asbd);
@ -144,17 +145,39 @@ static SInt64 getSizeProc(void* clientData) {
} }
totalFrames = total; totalFrames = total;
//Is there a way to get bitrate with extAudioFile? size = sizeof(afi);
bitrate = 0; err = ExtAudioFileGetProperty(_in, kExtAudioFileProperty_AudioFile, &size, &afi);
if(err != noErr) {
err = ExtAudioFileDispose(_in);
return NO;
}
SInt32 formatBitsPerSample;
size = sizeof(formatBitsPerSample);
err = AudioFileGetProperty(afi, kAudioFilePropertySourceBitDepth, &size, &formatBitsPerSample);
if(err != noErr) {
err = ExtAudioFileDispose(_in);
return NO;
}
UInt32 _bitrate;
size = sizeof(_bitrate);
err = AudioFileGetProperty(afi, kAudioFilePropertyBitRate, &size, &_bitrate);
if(err != noErr) {
err = ExtAudioFileDispose(_in);
return NO;
}
bitrate = (_bitrate + 500) / 1000;
// Set our properties // Set our properties
bitsPerSample = asbd.mBitsPerChannel; bitsPerSample = formatBitsPerSample;
channels = asbd.mChannelsPerFrame; channels = asbd.mChannelsPerFrame;
frequency = asbd.mSampleRate; frequency = asbd.mSampleRate;
floatingPoint = NO; floatingPoint = NO;
// mBitsPerChannel will only be set for lpcm formats // mBitsPerChannel will only be set for lpcm formats
if(0 == bitsPerSample) { if(bitsPerSample <= 0) {
bitsPerSample = 32; bitsPerSample = 32;
floatingPoint = YES; floatingPoint = YES;
} }