这个问题听起来可能很愚蠢,但问题是这样的:我正在学习如何使用音频队列,并且我所举的示例(aqtest)对我来说是一个不错的指南,直到我最近发现aqtest不适合iPhone 。 (我很愚蠢)我在Internet上服务时发现iPhone没有FSRef。
如果可能的话,我想找到一种解决FSRef东西的方法。因此,问题来了:我可以使用其他东西代替iPhone SDK上的FSRef吗?还是我错过了什么?
最佳答案
FSRef在手机上根本不可用。 FSRef是一种表示文件引用的方式,在大多数情况下,首选用NSURL替换为file:方案。
话虽如此,iPhone肯定有一个SpeakHere示例,它不使用FSRefs。
至于aqtest,我假设您遇到的代码是:
FSRef fsref;
XThrowIfError(FSPathMakeRef(filePath, &fsref, NULL), "Input file not found");
XThrowIfError(AudioFileOpen(&fsref, fsRdPerm, 0, &myInfo.mAudioFile), "AudioFileOpen failed");
就像我说的那样,FSRef不再是处理文件引用的首选方式,并且在电话上不可用,NSURL是。因此,切换到基于URL的版本:
NSString *pathString = [NSString stringWithCString: filePath];
if (!pathString) { printf("can't parse file path\n"); return; }
NSURL *url = [NSURL fileURLWithPath:pathString];
if (! url) { printf("can't make file url\n"); return; }
XThrowIfError(AudioFileOpenURL (url, kAudioFileReadPermission, 0/*inFileTypeHint*/, &myInfo.mAudioFil), "can't open file");
那应该可以在手机上使用,当然很多aqtest本身也不能在手机上使用,毕竟不支持在设备上运行命令行工具。
关于iphone - iPhone SDK中是否有FSRef,或者可以作为FSRef的替代品?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1163794/