2

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

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

4

2 回答 2

2

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

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

于 2009-07-22T08:29:11.837 回答
1

你看过 aqplay.cpp 中的代码吗?
这是我从Core Audio -> SimpleSDK -> AudioQueueTools 获取的一些示例代码。

它使用 aCFURLRef打开它的AudioFileID.

大多数代码看起来应该为 iPhone 编译。

于 2009-07-23T09:14:16.287 回答