首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何关闭已打开可读的AKAudioFile (或AVAudioFile)?

如何关闭已打开可读的AKAudioFile (或AVAudioFile)?
EN

Stack Overflow用户
提问于 2021-02-03 10:13:30
回答 1查看 73关注 0票数 3

我在一个正在开发的应用程序中遇到了一个问题,最终打开了太多的音频文件。我还没有找到任何关闭文件的方法,所以我尝试设置不习惯为空的文件,但问题仍然存在。

我已将音频文件声明为非可选参数,例如:

let audioFile1 = AKAudioFile!

在初始化它们的方法中,在以下代码块(audioUrl是该方法的一个参数)中初始化失败(在打开了太多文件之后):

代码语言:javascript
复制
 var audioFileOpt: AKAudioFile?
        
        do {
            audioFileOpt = try AKAudioFile(forReading: audioUrl)
            
        } catch let error {
            print("Error reading url: ", audioUrl)
            print(error.localizedDescription)
        }

这是返回的错误:The operation couldn\U2019t be completed. (com.apple.coreaudio.avfaudio error -42.),这是一个CoreAudio错误(kAudio_TooManyFilesOpenError)。

我非常感谢任何关于如何解决这个问题的建议。

EN

回答 1

Stack Overflow用户

发布于 2021-10-04 18:23:24

虽然这不是关闭文件(我也找不到这样做的方法),但下面的代码解决了您收到的错误:

您需要增加打开的文件数,以避免出现com.apple.coreaudio.avfaudio错误-42 - CoreAudio错误(kAudio_TooManyFilesOpenError。AVAudioPlayer可以处理的音频文件的默认限制是256。这是一个objective-c解决方案。

在AppDelegate.h中插入此内容

代码语言:javascript
复制
#include <stdio.h>
#include <sys/resource.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

在AppDelegate.m,didFinishLaunchingWithOptions方法中插入此代码

代码语言:javascript
复制
struct rlimit limit;
getrlimit(RLIMIT_NOFILE, &limit);
limit.rlim_cur = 5120; // This gives 20x more than default, but change accordingly
setrlimit(RLIMIT_NOFILE, &limit);
getrlimit(RLIMIT_NOFILE, &limit);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66020322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档