iphonesdk中是否有FSRef,或者是否存在可以是FSRef';还有别的选择吗?

iphonesdk中是否有FSRef,或者是否存在可以是FSRef';还有别的选择吗?,iphone,audioqueueservices,Iphone,Audioqueueservices,这个问题可能听起来很愚蠢,但问题是:我正在学习如何使用音频队列,我所举的例子(aqtest)一直是一个很好的指南,直到最近我发现aqtest不适用于iPhone。(愚蠢的我)我在互联网上服务,发现iPhone没有FSRef 如果可能的话,我想找到一种解决FSRef问题的方法。所以问题来了:我可以使用其他东西来代替iPhone SDK上的FSRef吗?还是我遗漏了什么?手机上根本没有FSREF。fsref是一种表示文件引用的方法,在大多数情况下,首选的替换方法是使用file:scheme替换NSU

这个问题可能听起来很愚蠢,但问题是:我正在学习如何使用音频队列,我所举的例子(aqtest)一直是一个很好的指南,直到最近我发现aqtest不适用于iPhone。(愚蠢的我)我在互联网上服务,发现iPhone没有FSRef


如果可能的话,我想找到一种解决FSRef问题的方法。所以问题来了:我可以使用其他东西来代替iPhone SDK上的FSRef吗?还是我遗漏了什么?

手机上根本没有FSREF。fsref是一种表示文件引用的方法,在大多数情况下,首选的替换方法是使用file:scheme替换NSURL

话虽如此,iPhone肯定有一个例子,它不使用FSRefs

至于aqtest,我假设您遇到问题的代码是:

FSRef fsref;    
XThrowIfError(FSPathMakeRef(filePath, &fsref, NULL), "Input file not found");

XThrowIfError(AudioFileOpen(&fsref, fsRdPerm, 0, &myInfo.mAudioFile), "AudioFileOpen failed");
正如我所说,FSRef不再是处理文件ref的首选方式,而且在电话上也不可用,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本身在手机上都不起作用,毕竟在设备上运行命令行工具是不受支持的。

你看过aqplay.cpp中的代码了吗?这是我从
核心音频->SimpleSDK->音频队列工具

它使用
CFURLRef
打开其
AudioFileID


大部分代码看起来应该为iPhone编译。

实际上,我没有使用SpeakHere示例,因为它让我感到困惑。当我阅读苹果关于音频队列的文档时,aqtest让我更清楚地理解了很多事情。不过说到这里,我不知道该怎么办。我甚至不知道从哪里开始寻找,以了解它是如何工作的。