我需要将obj-C源文件从.m更改为.mm才能访问某些c ++类。 一旦我这样做,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>
我正在使用iOS 6.1 SDK构建,目标是iOS 6.0
答案 0 :(得分:2)
您已将某些变量设置为错误类型,请使用以下替换项:
UInt32 dataSize, numBytesRead, packetsRead;
UInt64 packetCount;
当编译为.m文件时,它确实会给出一个错误类型的警告(至少使用默认的编译器设置),看起来.mm更严格,因此会给你一个错误。