如何提供Buffer.read的相对路径?

时间:2013-09-21 20:06:40

标签: supercollider

所以我想使用相对路径将声音文件加载到缓冲区中。 (我将我的东西保留在版本控制之下,并且不想对某人可能在其文件系统上克隆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

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

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

1 个答案:

答案 0 :(得分:11)

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

您案例中当前的工作目录是什么?你可以通过运行找到

     File.getcwd

(这是.asAbsolutePath使用的。)cwd取决于你的操作系统 - 在某些平台上它并不是一个特别方便的默认设置。你不能完全依赖它。

在您的情况下,如果您希望相对于您的脚本或类的位置解析路径,那么您需要自己执行此操作。例如:

     // 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";