AUSampler:引用外部(下载)音频文件

时间:2015-06-30 04:57:35

标签: ios audio core-audio audiounit

我有一个应用程序,它使用.aupreset个文件和.wav个样本来定义加载到AUSampler音频单元的乐器。 .aupreset个文件使用绝对路径引用.wav个文件。如complete中所述,如果在原始路径中找不到音频文件,则系统会在捆绑目录 NSLibraryDirectory NSDocumentsDirectory中进行搜索,以及 NSDownloadsDirectory ,按此顺序。

我可以在应用程序包中使用这些乐器,但现在我正在尝试支持下载的乐器。如果我将内容放在<NSLibraryDirectory>/Sounds/中,则AUSampler无法找到.wav个样本,但如果我将其放在<NSDocumentsDirectory>/Sounds/中,则可以正常使用。我不想把文件目录弄乱,因为该文件夹显示在iTunes中。

这是AUSampler打印的错误:

09:27:25.251 ERROR:     [0x19989c310] 372: Failed to locate sample 'file:///Sounds/trance/square-lead/Square-12000Hz.wav'

另外,我甚至无法在NSDownloadsDirectory位置创建目录 - 我只是得到一个不允许操作的错误。

之前有没有人成功从图书馆加载样本?

(这是在iOS 8上。)

2 个答案:

答案 0 :(得分:1)

我收到了this explanation from an Apple Engineer

  

事实证明,iOS的文档不正确:除了捆绑包之外,AUSampler只会查看NSDocumentDirectory和NSDownloadsDirectory。如果您不打算将其存储在捆绑包中,或者您希望允许用户向应用添加其他内容,则这些是存储特定于应用程序的数据的推荐位置。

     

对于OSX,NSLibraryDirectory也可用。

但是,根据我自己的测试,您也无法使用NSDownloadsDirectory,因为尝试创建目录会返回错误(&#34;操作无法完成。操作不允许&#34;) 。所以看来iOS上的唯一选项是从bundle或Documents目录加载。

当您还想为其他内容启用iTunes文件共享时,这不是理想的,所以我想到了另一种解决方法:将内容放在任意位置,并在加载.aupreset文件时,重写所有文件引用在将其设置到音频单元之前引用该位置。

答案 1 :(得分:0)

是的,你绝对可以从Library目录中加载样本。 我以为你必须创建库目录,但我错了。这是我想到的Application Support目录。