【问题标题】:Is there a FSRef in iPhone SDK or is there something that can be FSRef's alternative?iPhone SDK 中是否有 FSRef 或者是否有可以替代 FSRef 的东西?
【发布时间】:2009-07-22 08:17:21
【问题描述】:

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

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

【问题讨论】:

    标签: iphone audioqueueservices


    【解决方案1】:

    FSRefs 在手机上根本不可用。 FSRefs 是一种表示文件引用的方式,在大多数情况下,首选的替代方法是带有文件的 NSURL:scheme。

    话虽如此,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本身在手机上是不行的,毕竟不支持在设备上运行命令行工具。

    【讨论】:

    • 实际上我正在逃避 SpeakHere 示例,因为它让我感到困惑。当我阅读有关音频队列的苹果文档时,aqtest 让我更清楚地理解了很多事情。不过,对于 SpeakHere,我不确定它的去向。我什至不知道从哪里开始寻找以了解它是如何工作的。
    【解决方案2】:

    您看过 aqplay.cpp 中的代码吗?这是我从中获取的一些示例代码
    核心音频 -> SimpleSDK -> AudioQueueTools。

    它使用CFURLRef 打开它的AudioFileID

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 2011-04-13
      • 2017-12-08
      • 2010-10-22
      • 2011-08-19
      • 2015-11-12
      • 2013-01-13
      相关资源
      最近更新 更多