我想我的问题是如何预先配置我的 iOS 沙箱以在其中包含音频文件,以便在构建后立即测试我的音频队列结构。
我正在开发一个 iOS 应用程序来播放我在服务器上托管的流中的音频。在我解决如何从 HTTP 流中获取数据之前,我想我会先使用音频队列服务来播放手机中的文件。据我了解,如果您想一次播放多个音频流,则必须使用音频队列,而不是 AVPlayer 或任何其他服务。
我遇到的问题是我无法配置我的 CFURLRef 因为我找不到我的文件。
AudioBufferPlayer *player = (AudioBufferPlayer*) inUserData;
if (player.playing) {
NSString *path = @"/Users/acopp/Library/Application Support/iPhone Simulator/5.1/Applications/F9CA1197-A661-4B2F-9B42-68A991F61B19/";
const char *filePath = [path cStringUsingEncoding:[NSString defaultCStringEncoding]];
CFURLRef audioFileURL = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)filePath, strlen(filePath), false);
OSStatus result = AudioFileOpenURL(audioFileURL, kAudioFileReadPermission, kAudioFileCAFType, player.mAudioFile);
UInt32 numBytesReadFromFile;
UInt32 numPackets = player.mNumPacketsToRead;
AudioFileReadPackets(
*(player.mAudioFile),
false,
&numBytesReadFromFile,
NULL,
player.mCurrentPacket,
&numPackets,
inBuffer->mAudioData
);
if (numPackets > 0) {
inBuffer->mAudioDataByteSize = numBytesReadFromFile;
AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
player.mCurrentPacket += numPackets;
}
我在我的 AudioFileReadPackets 收到一条错误消息 EXC_BAD_ACCESS,此时我的 OSStatus 结果设置为 -50,所以我认为我的 AudioFileOpenURL 调用失败。
我认为我的问题是我的 *path 在这一点上并没有真正指向任何东西。问题是当我去
@"/Users/acopp/Library/Application Support/iPhone Simulator/5.1/Applications/F9CA1197-A661-4B2F-9B42-68A991F61B19/"
我的四个选项是 Demo3、Documents、Library 和 temp。这些都没有我添加到项目中的 quick.caf 文件。
TL,DR - 除非我忽略了某些东西,否则我相信我会在构建之前询问如何将音频文件添加到我的沙箱中,以便我可以在 iPhone 模拟器上测试我的代码。