5

所以我想使用相对路径将声音文件加载到缓冲区中。(我将我的东西置于版本控制之下,并且不想对有人可能在他们的文件系统上克隆 repo 的位置做出任何假设。)

因此,我最初假设如果我提供了一个看起来相对的路径,那么 SC 会将其解释为相对于正在执行的文件的位置:

Buffer.read(s, "Samples/HiHats1.hihat2.wav");

但 SC 找不到该文件。所以我抬头asAbsolutePath试了一下:

Buffer.read(s, "Samples/HiHats1.hihat2.wav".asAbsolutePath);

这也不起作用,因为 SC 无法从我的相对路径中计算出绝对路径。

"Samples/HiHats1.hihat2.wav".asAbsolutePath

...实际上在我的文件系统上返回一个不存在的位置。欢呼!

任何人都可以就我如何完成这项麻烦的任务提出任何建议吗?

4

1 回答 1

13

SuperCollider 可以很好地处理相对路径 - 就像许多软件一样,它会相对于当前工作目录来解析它们。通常这是相对于可执行文件,而不是脚本文件,因此会造成混淆。

在您的情况下,当前的工作目录是什么?你可以通过运行找出

     File.getcwd

(这就是.asAbsolutePath用途。) cwd 取决于您的操作系统 - 在某些平台上,它不是一个特别方便的默认设置。你不能指望它是特别的东西。

在您的情况下,如果您希望相对于script 或 class的位置解析路径,那么您需要自己做。例如:

     // Use the path of whatever file is currently executing:
     var samplePath = thisProcess.nowExecutingPath.dirname +/+ "Samples/HiHats1.hihat2.wav";

     // Use the path of the class file for the class you're coding
     var samplePath = this.class.filenameSymbol.asString.dirname +/+ "Samples/HiHats1.hihat2.wav";
于 2013-09-21T22:26:37.890 回答