1

我的应用程序从我的服务器下载小音频文件并将它们存储在NSTemporaryDirectory(). 然后我使用ObjectAL(这是 Karl Stenerud 的 OpenAL 包装库)将音频放置在 3D 空间中。这个库使用ExtAudioFileAPI 来打开和读取音频文件等。问题是它似乎ExtAudioFileOpenURL()不允许读取任何文件,除了[NSBundle mainBundle]. 这是真的吗?我可以成功打开/播放 .mp3、.aif 和 .caf 格式的音频文件,只要文件包含在-mainBundle.

如果确实如此,有没有办法使用ExtAudioFileOpenURL()驻留在NSTemporaryDirectory()(或任何其他 iOS 文件目录中)成功打开音频文件?以下概述了相关代码:

- (void)setSourceWithSourceURL:(NSString *)urlString type:(CueType)cueType volume:(ALfloat)vol isMono:(BOOL)mono isSFX:(BOOL)isSFX {

    ALSource *source = [self sourceForKey:cueType];
    ALBuffer *buffer = [self bufferForKey:cueType];
    if (!source) {
        source = [[ALSource source] retain];
    }
    if (!buffer) {
        NSArray *array = [urlString componentsSeparatedByString:@"/"];
        NSURL *furl = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:array.lastObject]];

        buffer = [[[OpenALManager sharedInstance] bufferFromUrl:furl reduceToMono:mono] retain];
    }
    // fails when setting buffer...
}

拨打电话之前的NSLog输出是furl-bufferFromUrlfile:///private/var/mobile/Applications/08E20AF6-6333-4E24-9F12-20C6D6381C0B/tmp/4_right_turn_cue.aif

我验证了该文件确实存在...

-bufferFromUrl: reduceToMono:调用本质上调用了一个内部-init方法:

- (id) initWithUrl:(NSURL*) urlIn reduceToMono:(bool) reduceToMonoIn {
    if(nil != (self = [super init])) {
        url = as_retain(urlIn);
        reduceToMono = reduceToMonoIn;

        OSStatus error = 0;
        UInt32 size;

        if(nil == url)
        {
            OAL_LOG_ERROR(@"Cannot open NULL file / url");
            goto done;
        }

        // Open the file
        if(noErr != (error = ExtAudioFileOpenURL((as_bridge CFURLRef)url, &fileHandle)))
        {
            REPORT_EXTAUDIO_CALL(error, @"Could not open url %@", url);
            goto done;
        }
        // ...more stuff but opening the URL fails

一旦ExtAudioFileOpenURL()被调用,我会收到以下错误消息:

OAL Error: -[OALAudioFile initWithUrl:reduceToMono:]: Could not open url file:///private/var/mobile/Applications/08E20AF6-6333-4E24-9F12-20C6D6381C0B/tmp/4_right_turn_cue.aif (error code 0x7768743f: Unknown ext audio error)

关于为什么无法从文件目录中读取音频文件的任何见解?有什么想法或解决方法吗?

4

0 回答 0