我在一个正在开发的应用程序中遇到了一个问题,最终打开了太多的音频文件。我还没有找到任何关闭文件的方法,所以我尝试设置不习惯为空的文件,但问题仍然存在。
我已将音频文件声明为非可选参数,例如:
let audioFile1 = AKAudioFile!
在初始化它们的方法中,在以下代码块(audioUrl是该方法的一个参数)中初始化失败(在打开了太多文件之后):
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)。
我非常感谢任何关于如何解决这个问题的建议。
发布于 2021-10-04 18:23:24
虽然这不是关闭文件(我也找不到这样做的方法),但下面的代码解决了您收到的错误:
您需要增加打开的文件数,以避免出现com.apple.coreaudio.avfaudio错误-42 - CoreAudio错误(kAudio_TooManyFilesOpenError。AVAudioPlayer可以处理的音频文件的默认限制是256。这是一个objective-c解决方案。
在AppDelegate.h中插入此内容
#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方法中插入此代码
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);https://stackoverflow.com/questions/66020322
复制相似问题