From beba24a51347207b3b28c01ddb524d0804632ed9 Mon Sep 17 00:00:00 2001 From: vspader Date: Sun, 7 May 2006 13:19:23 +0000 Subject: [PATCH] Core audio fun --- Cog.xcodeproj/project.pbxproj | 16 ++ English.lproj/MainMenu.nib/info.nib | 6 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 57046 -> 56839 bytes Info.plist | 2 +- Playlist/PlaylistController.m | 7 +- Playlist/PlaylistEntry.m | 1 + Sound/BufferChain.m | 1 + Sound/InputNode.m | 4 +- Sound/SoundController.m | 1 + Sound/SoundFile/CoreAudioFile.h | 32 ++++ Sound/SoundFile/CoreAudioFile.m | 192 ++++++++++++++++++++ Sound/SoundFile/SoundFile.mm | 37 +++- Utils/CoreAudioUtils.h | 24 +++ Utils/CoreAudioUtils.m | 49 +++++ 14 files changed, 355 insertions(+), 17 deletions(-) create mode 100644 Sound/SoundFile/CoreAudioFile.h create mode 100644 Sound/SoundFile/CoreAudioFile.m create mode 100644 Utils/CoreAudioUtils.h create mode 100644 Utils/CoreAudioUtils.m diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index 1871aff80..dbce54fd3 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -13,6 +13,10 @@ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 8E4C7F080A0509FC003BE25F /* DragScrollView.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E4C7F060A0509FC003BE25F /* DragScrollView.h */; }; 8E4C7F090A0509FC003BE25F /* DragScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4C7F070A0509FC003BE25F /* DragScrollView.m */; }; + 8E6A8E2B0A0D8A68002ABE9C /* CoreAudioFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E6A8E270A0D8A68002ABE9C /* CoreAudioFile.h */; }; + 8E6A8E2C0A0D8A68002ABE9C /* CoreAudioFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */; }; + 8E6A8E370A0D8AD8002ABE9C /* CoreAudioUtils.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */; }; + 8E6A8E380A0D8AD8002ABE9C /* CoreAudioUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */; }; 8E75756909F31D5A0080F1EE /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751909F31D5A0080F1EE /* AppController.m */; }; 8E75756A09F31D5A0080F1EE /* ClickField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751C09F31D5A0080F1EE /* ClickField.m */; }; 8E75756B09F31D5A0080F1EE /* InfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751E09F31D5A0080F1EE /* InfoView.m */; }; @@ -142,6 +146,8 @@ 8E757B5809F326710080F1EE /* FAAD2.framework in CopyFiles */, 8E757B5909F326710080F1EE /* DecMPA.framework in CopyFiles */, 8E4C7F080A0509FC003BE25F /* DragScrollView.h in CopyFiles */, + 8E6A8E2B0A0D8A68002ABE9C /* CoreAudioFile.h in CopyFiles */, + 8E6A8E370A0D8AD8002ABE9C /* CoreAudioUtils.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -160,6 +166,10 @@ 8D1107320486CEB800E47090 /* Cog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cog.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8E4C7F060A0509FC003BE25F /* DragScrollView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DragScrollView.h; sourceTree = ""; }; 8E4C7F070A0509FC003BE25F /* DragScrollView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DragScrollView.m; sourceTree = ""; }; + 8E6A8E270A0D8A68002ABE9C /* CoreAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioFile.h; sourceTree = ""; }; + 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioFile.m; sourceTree = ""; }; + 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioUtils.h; sourceTree = ""; }; + 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioUtils.m; sourceTree = ""; }; 8E75751309F31D130080F1EE /* French */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = French.lproj/MainMenu.nib; sourceTree = ""; }; 8E75751809F31D5A0080F1EE /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 8E75751909F31D5A0080F1EE /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; @@ -474,6 +484,8 @@ 8E75754409F31D5A0080F1EE /* SoundFile */ = { isa = PBXGroup; children = ( + 8E6A8E270A0D8A68002ABE9C /* CoreAudioFile.h */, + 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */, 8E75754509F31D5A0080F1EE /* AACFile.h */, 8E75754609F31D5A0080F1EE /* AACFile.m */, 8E75754709F31D5A0080F1EE /* FlacFile.h */, @@ -512,6 +524,8 @@ 8E75756209F31D5A0080F1EE /* Utils */ = { isa = PBXGroup; children = ( + 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */, + 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */, 8E75756309F31D5A0080F1EE /* DBLog.h */, 8E75756409F31D5A0080F1EE /* DBLog.m */, 8E75756509F31D5A0080F1EE /* Semaphore.h */, @@ -699,6 +713,8 @@ 8E75758C09F31D5A0080F1EE /* Semaphore.m in Sources */, 8E75758D09F31D5A0080F1EE /* VirtualRingBuffer.m in Sources */, 8E4C7F090A0509FC003BE25F /* DragScrollView.m in Sources */, + 8E6A8E2C0A0D8A68002ABE9C /* CoreAudioFile.m in Sources */, + 8E6A8E380A0D8AD8002ABE9C /* CoreAudioUtils.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 62541da41..cd1c35531 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -28,11 +28,11 @@ 3 IBOpenObjects - 513 - 823 463 - 29 + 823 21 + 29 + 513 IBSystem Version 8I127 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 74275ed5d0b8dd55d01bb42156147f8b7889ae9f..02929b50920765b43d0315e30ce617e55453d7c9 100644 GIT binary patch literal 56839 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 ???? CFBundleVersion - 0.05 alpha 1 + 0.06 NSAppleScriptEnabled YES NSMainNibFile diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index e932440a1..f3d62321d 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -10,6 +10,8 @@ #import "PlaylistEntry.h" #import "Shuffle.h" +extern NSArray * getCoreAudioExtensions(); + @implementation PlaylistController #define SHUFFLE_HISTORY_SIZE 100 @@ -20,7 +22,8 @@ if (self) { - acceptableFileTypes = [[NSArray alloc] initWithObjects:@"shn",@"wv",@"ogg",@"wav",@"mpc",@"flac",@"ape",@"mp3",@"aiff",@"aif",@"aac",nil]; + acceptableFileTypes = [NSArray arrayWithObjects:@"shn",@"wv",@"ogg",@"mpc",@"flac",@"ape",nil]; + acceptableFileTypes = [[acceptableFileTypes arrayByAddingObjectsFromArray:getCoreAudioExtensions()] retain]; acceptablePlaylistTypes = [[NSArray alloc] initWithObjects:@"playlist",nil]; shuffleList = [[NSMutableArray alloc] init]; // DBLog(@"DAH BUTTER CHORNAR: %@", history); @@ -40,7 +43,7 @@ { PlaylistEntry *pe = [[PlaylistEntry alloc] init]; - [pe setFilename:filename]; //Setfilename takes car of opening the soundfile..cheap hack, but works for now + [pe setFilename:filename]; [pe setIndex:index]; [pe readTags]; [pe readInfo]; diff --git a/Playlist/PlaylistEntry.m b/Playlist/PlaylistEntry.m index 9cf63438d..6c285823d 100644 --- a/Playlist/PlaylistEntry.m +++ b/Playlist/PlaylistEntry.m @@ -199,6 +199,7 @@ sampleRate = [sf frequency]; [self setLengthString:length]; + [sf release]; // DBLog(@"Length: %f bitRate: %i channels: %i bps: %i samplerate: %f", length, bitRate, channels, bitsPerSample, sampleRate); //[(SoundFile *)sf close]; diff --git a/Sound/BufferChain.m b/Sound/BufferChain.m index 78b1885a4..31c944417 100644 --- a/Sound/BufferChain.m +++ b/Sound/BufferChain.m @@ -67,6 +67,7 @@ [playlistEntry release]; [inputNode release]; + [converterNode release]; [super dealloc]; diff --git a/Sound/InputNode.m b/Sound/InputNode.m index 717420dea..ee074d959 100644 --- a/Sound/InputNode.m +++ b/Sound/InputNode.m @@ -40,7 +40,7 @@ char *buf; int amountRead; - DBLog(@"Playing file.\n"); + NSLog(@"Playing file: %i", self); buf = malloc(chunk_size); while ([self shouldContinue] == YES && [self endOfStream] == NO) @@ -65,6 +65,8 @@ free(buf); [soundFile close]; + + NSLog(@"CLOSED: %i", self); } - (void)seek:(double)time diff --git a/Sound/SoundController.m b/Sound/SoundController.m index 02ac11fbb..fa43d97f0 100644 --- a/Sound/SoundController.m +++ b/Sound/SoundController.m @@ -50,6 +50,7 @@ if (bufferChain) { [bufferChain setShouldContinue:NO]; + [bufferChain release]; } bufferChain = [[BufferChain alloc] initWithController:self]; diff --git a/Sound/SoundFile/CoreAudioFile.h b/Sound/SoundFile/CoreAudioFile.h new file mode 100644 index 000000000..61a613346 --- /dev/null +++ b/Sound/SoundFile/CoreAudioFile.h @@ -0,0 +1,32 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import + +#include + +#import "SoundFile.h" + +@interface CoreAudioFile : SoundFile +{ + ExtAudioFileRef _in; +} + +@end diff --git a/Sound/SoundFile/CoreAudioFile.m b/Sound/SoundFile/CoreAudioFile.m new file mode 100644 index 000000000..e50b89efc --- /dev/null +++ b/Sound/SoundFile/CoreAudioFile.m @@ -0,0 +1,192 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import "CoreAudioFile.h" + +@interface CoreAudioFile (Private) +- (BOOL) readInfoFromExtAudioFileRef:(ExtAudioFileRef)file; +@end + +@implementation CoreAudioFile + +- (BOOL) open:(const char *)filename +{ + OSStatus err; + FSRef ref; + + // Open the input file + err = FSPathMakeRef((const UInt8 *)filename, &ref, NULL); + if(noErr != err) { + NSLog(@"Error opening ExtAudioFile: %i", err); + return NO; + } + + err = ExtAudioFileOpen(&ref, &_in); + if(noErr != err) { + NSLog(@"Error opening ExtAudioFile: %i", err); + return NO; + } + + // Read properties + return [self readInfoFromExtAudioFileRef:_in]; +} + +- (void) close +{ + OSStatus err; + + err = ExtAudioFileDispose(_in); + if(noErr != err) { + NSLog(@"Error closing ExtAudioFile: %i", err); + } +} + +- (BOOL) readInfo:(const char *)filename +{ + OSStatus err; + FSRef ref; + BOOL result; + + result = YES; + + // Open the input file + err = FSPathMakeRef((const UInt8 *)filename, &ref, NULL); + if(noErr != err) { + NSLog(@"Error closing ExtAudioFile: %i", err); + return NO; + } + + err = ExtAudioFileOpen(&ref, &_in); + if(noErr != err) { + NSLog(@"Error closing ExtAudioFile: %i", err); + return NO; + } + + result = [self readInfoFromExtAudioFileRef:_in]; + + return result; +} + +- (BOOL) readInfoFromExtAudioFileRef:(ExtAudioFileRef)file +{ + OSStatus err; + UInt32 size; + SInt64 totalFrames; + AudioStreamBasicDescription asbd; + + // Get input file information + size = sizeof(asbd); + err = ExtAudioFileGetProperty(file, kExtAudioFileProperty_FileDataFormat, &size, &asbd); + if(err != noErr) { + err = ExtAudioFileDispose(file); + NSLog(@"Error closing ExtAudioFile: %i", err); + return NO; + } + + size = sizeof(totalFrames); + err = ExtAudioFileGetProperty(file, kExtAudioFileProperty_FileLengthFrames, &size, &totalFrames); + if(err != noErr) { + err = ExtAudioFileDispose(file); + NSLog(@"Error closing ExtAudioFile: %i", err); + return NO; + } + + // Set our properties + bitsPerSample = asbd.mBitsPerChannel; + channels = asbd.mChannelsPerFrame; + frequency = asbd.mSampleRate; + + // mBitsPerChannel will only be set for lpcm formats + if(0 == bitsPerSample) { + bitsPerSample = 16; + } + + totalSize = totalFrames * channels * (bitsPerSample / 8); + currentPosition = 0; + bitRate = 0; + + // Set output format + AudioStreamBasicDescription result; + + bzero(&result, sizeof(AudioStreamBasicDescription)); + + result.mFormatID = kAudioFormatLinearPCM; + result.mFormatFlags = kAudioFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsBigEndian; + + result.mSampleRate = frequency; + result.mChannelsPerFrame = channels; + result.mBitsPerChannel = bitsPerSample; + + result.mBytesPerPacket = channels * (bitsPerSample / 8); + result.mFramesPerPacket = 1; + result.mBytesPerFrame = channels * (bitsPerSample / 8); + + err = ExtAudioFileSetProperty(file, kExtAudioFileProperty_ClientDataFormat, sizeof(result), &result); + if(noErr != err) { + err = ExtAudioFileDispose(file); + NSLog(@"Error closing ExtAudioFile: %i", err); + return NO; + } + + // Further properties + isBigEndian = YES; + isUnsigned = NO; + + NSLog(@"Successfully read file"); + + return YES; +} + +- (int) fillBuffer:(void *)buf ofSize:(UInt32)size +{ + OSStatus err; + AudioBufferList bufferList; + UInt32 frameCount; + + // Set up the AudioBufferList + bufferList.mNumberBuffers = 1; + bufferList.mBuffers[0].mNumberChannels = channels; + bufferList.mBuffers[0].mData = buf; + bufferList.mBuffers[0].mDataByteSize = size; + + // Read a chunk of PCM input (converted from whatever format) + frameCount = (size / (channels * (bitsPerSample / 8))); + err = ExtAudioFileRead(_in, &frameCount, &bufferList); + if(err != noErr) { + NSLog(@"Error reading ExtAudioFile: %i", err); + return 0; + } + + return frameCount * (channels * (bitsPerSample / 8)); +} + +- (double) seekToTime:(double)milliseconds +{ + OSStatus err; + + err = ExtAudioFileSeek(_in, ((milliseconds / 1000.f) * frequency)); + if(noErr != err) { + return -1.f; + } + + return milliseconds; +} + +@end diff --git a/Sound/SoundFile/SoundFile.mm b/Sound/SoundFile/SoundFile.mm index 33c8e1e4e..dedd9dca8 100644 --- a/Sound/SoundFile/SoundFile.mm +++ b/Sound/SoundFile/SoundFile.mm @@ -9,14 +9,15 @@ #import "SoundFile.h" #import "FlacFile.h" -#import "AACFile.h" +//#import "AACFile.h" #import "MonkeysFile.h" -#import "MPEGFile.h" +//#import "MPEGFile.h" #import "MusepackFile.h" #import "VorbisFile.h" -#import "WaveFile.h" +//#import "WaveFile.h" #import "WavPackFile.h" #import "ShnFile.h" +#import "CoreAudioFile.h" extern "C" { BOOL hostIsBigEndian() @@ -27,6 +28,9 @@ BOOL hostIsBigEndian() return NO; #endif } + +extern NSArray * getCoreAudioExtensions(); + }; @implementation SoundFile @@ -75,14 +79,17 @@ BOOL hostIsBigEndian() */ + (SoundFile *)soundFileFromFilename:(NSString *)filename { - SoundFile *soundFile; + SoundFile *soundFile; + NSString *extension; DBLog(@"Filename: %@", filename); - if (([[filename pathExtension] caseInsensitiveCompare:@"wav"] == NSOrderedSame) || ([[filename pathExtension] caseInsensitiveCompare:@"aiff"] == NSOrderedSame) || ([[filename pathExtension] caseInsensitiveCompare:@"aif"] == NSOrderedSame)) + extension = [filename pathExtension]; + + /*if (([[filename pathExtension] caseInsensitiveCompare:@"wav"] == NSOrderedSame) || ([[filename pathExtension] caseInsensitiveCompare:@"aiff"] == NSOrderedSame) || ([[filename pathExtension] caseInsensitiveCompare:@"aif"] == NSOrderedSame)) { soundFile = [[WaveFile alloc] init]; - } - else if ([[filename pathExtension] caseInsensitiveCompare:@"ogg"] == NSOrderedSame) + }*/ + if ([[filename pathExtension] caseInsensitiveCompare:@"ogg"] == NSOrderedSame) { soundFile = [[VorbisFile alloc] init]; } @@ -98,14 +105,14 @@ BOOL hostIsBigEndian() { soundFile = [[MonkeysFile alloc] init]; } - else if ([[filename pathExtension] caseInsensitiveCompare:@"mp3"] == NSOrderedSame) + /*else if ([[filename pathExtension] caseInsensitiveCompare:@"mp3"] == NSOrderedSame) { soundFile = [[MPEGFile alloc] init]; } else if ([[filename pathExtension] caseInsensitiveCompare:@"aac"] == NSOrderedSame) { soundFile = [[AACFile alloc] init]; - } + }*/ else if ([[filename pathExtension] caseInsensitiveCompare:@"wv"] == NSOrderedSame) { soundFile = [[WavPackFile alloc] init]; @@ -116,7 +123,17 @@ BOOL hostIsBigEndian() } else { + unsigned i; + NSArray *extensions = getCoreAudioExtensions(); + soundFile = nil; + + for(i = 0; i < [extensions count]; ++i) { + if([[extensions objectAtIndex:i] caseInsensitiveCompare:extension]) { + soundFile = [[CoreAudioFile alloc] init]; + break; + } + } } return soundFile; @@ -148,7 +165,7 @@ BOOL hostIsBigEndian() return nil; [soundFile close]; - + return soundFile; } diff --git a/Utils/CoreAudioUtils.h b/Utils/CoreAudioUtils.h new file mode 100644 index 000000000..2b0138690 --- /dev/null +++ b/Utils/CoreAudioUtils.h @@ -0,0 +1,24 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * getCoreAudioExtensions(); diff --git a/Utils/CoreAudioUtils.m b/Utils/CoreAudioUtils.m new file mode 100644 index 000000000..b59c55db2 --- /dev/null +++ b/Utils/CoreAudioUtils.m @@ -0,0 +1,49 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "CoreAudioUtils.h" + +#include + +// CoreAudio utility function +static NSArray *sAudioExtensions = nil; + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * +getCoreAudioExtensions() +{ + OSStatus err; + UInt32 size; + + @synchronized(sAudioExtensions) { + if(nil == sAudioExtensions) { + size = sizeof(sAudioExtensions); + err = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AllExtensions, 0, NULL, &size, &sAudioExtensions); + if(noErr != err) { + return nil; + } + + [sAudioExtensions retain]; + } + } + + return sAudioExtensions; +} +