2

一部の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でビルドしています

4

1 に答える 1

2

一部の変数に間違ったタイプを指定しました。次の置換を使用してください。

UInt32 dataSize, numBytesRead, packetsRead;
UInt64 packetCount;

.mファイルとしてコンパイルすると、タイプが間違っているという警告が表示されます(少なくともデフォルトのコンパイラ設定では)。.mmの方が厳密であるため、代わりにエラーが発生します。

于 2013-03-15T10:31:48.593 に答える