一部のc++クラスにアクセスするには、obj-Cソースファイルを.mから.mmに変更する必要がありました。そうするとすぐに、AudioFileGetProperty()とAudioFileReadPackets()は「一致する関数呼び出しがありません」というエラーを報告します。
メソッドから実装外のCスタイルのブロックに移動するか、名前を.mに変更すると、機能します。
.mmファイルのメソッド内でAudioFileGetProperty()を使用できないのはなぜですか?
- (SInt16*)loadSingleWAVBuffer:(NSString*)inName ofLength:(UInt32*)outLength
{
AudioFileID audioFileID;
SInt64 dataSize, packetsRead, numBytesRead, storageSize, packetCount;
NSString *filePath = [NSString stringWithFormat:@"%@/%@%@%@", [[NSBundle mainBundle] bundlePath], self.lessonName, @"/Phrase Data/", inName];
CFURLRef myFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
OSStatus err = AudioFileOpenURL(myFileURL, kAudioFileReadPermission, 0, &audioFileID);
AudioStreamBasicDescription asbd;
UInt32 propSize = sizeof(asbd);
AudioFileGetProperty(audioFileID, kAudioFilePropertyDataFormat,&propSize, &asbd);
dataSize = sizeof packetCount;
OSStatus result = AudioFileGetProperty(audioFileID, kAudioFilePropertyAudioDataPacketCount, &dataSize, &packetCount);
packetsRead = packetCount;
printf("File Opened, packet Count: %lld", packetCount);
storageSize = 2 * packetCount;
SInt16* outBuffer = (SInt16*)malloc( storageSize);
result = AudioFileReadPackets (audioFileID, false, &numBytesRead, NULL, 0, &packetsRead, outBuffer);
*outLength = packetsRead;
return outBuffer;
}
私はAudioToolboxフレームワークを使用しており、ヘッダーを含めています。
#import <AudioToolbox/AudioToolbox.h>
iOS6.0をターゲットにしたiOS6.1SDKでビルドしています