这是我的代码。我从iOS库中复制了一些。
- (void)getSamplesWithFileName:(NSString *)fileName
storeToPointer:(SInt16*)pointer
withNumberOfSamples:(UInt32*)numberOfSamples
{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* url = [[fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSLog(@"%@",url);
NSString* directory = [url path];
NSString* nsFilePath = [directory stringByAppendingPathComponent:fileName];
const char* filePath = [nsFilePath cStringUsingEncoding:[NSString defaultCStringEncoding]];
CFURLRef audioFileURL =
CFURLCreateFromFileSystemRepresentation ( // 1
NULL, // 2
(const UInt8 *) filePath, // 3
strlen (filePath), // 4
false // 5
);
struct AQPlayerState aqData; // 1
aqData.mDataFormat.mFormatID = kAudioFormatLinearPCM; // 2
aqData.mDataFormat.mSampleRate = 8000.0; // 3
aqData.mDataFormat.mChannelsPerFrame = 1; // 4
aqData.mDataFormat.mBitsPerChannel = 16; // 5
aqData.mDataFormat.mBytesPerPacket = // 6
aqData.mDataFormat.mBytesPerFrame =
aqData.mDataFormat.mChannelsPerFrame * sizeof (SInt16);
aqData.mDataFormat.mFramesPerPacket = 1; // 7
OSStatus result =
AudioFileOpenURL ( // 2
audioFileURL, // 3
kAudioFileReadPermission,//fsRdPerm // 4
0, // 5
&aqData.mAudioFile // 6
);
NSLog(@"Play back open status:%ld", result);
CFRelease (audioFileURL); // 7
UInt32 dataFormatSize = sizeof (aqData.mDataFormat); // 1
AudioFileGetProperty ( // 2
aqData.mAudioFile, // 3
kAudioFilePropertyDataFormat, // 4
&dataFormatSize, // 5
&aqData.mDataFormat // 6
);
UInt32 numBytesReadFromFile;
UInt32 numPackets = 100000;
// pointer = malloc(numPackets * sizeof(SInt16));
AudioFileReadPackets(aqData.mAudioFile, false, &numBytesReadFromFile, NULL, 0, &numPackets, pointer);
printf("%ld", numBytesReadFromFile);
*numberOfSamples = numBytesReadFromFile;
}
但似乎我得到了错误的数据!我测试了'Ahhhhh'的声音,并获得了很高的过零率。我怎样才能读到这个音频文件?
答案 0 :(得分:2)
使用Extended Audio File Services
使用ExtAudioFileOpenURL打开文件,使用ExtAudioFileRead将它们读入缓冲区。适用于Core Audio支持的所有格式。
如果您想进入Core Audio编程,我可以推荐这本书Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS。
编辑:第一个链接的文档包含可能对您有帮助的示例代码。