因此,我想使用相对路径将声音文件加载到缓冲区中。(我将自己的内容保持在版本控制之下,并且不希望对有人可以在其文件系统上克隆存储库的位置进行任何假设。)
因此,我最初假设,如果提供的路径看起来是相对的,则SC会将其解释为相对于正在执行的文件的位置:
Buffer.read(s, "Samples/HiHats1.hihat2.wav");
但是SC无法找到该文件。因此,我抬起头来asAbsolutePath
尝试:
Buffer.read(s, "Samples/HiHats1.hihat2.wav".asAbsolutePath);
这也不起作用,因为SC无法确定相对于我的相对路径的绝对路径。
"Samples/HiHats1.hihat2.wav".asAbsolutePath
...实际上返回了我文件系统上不存在的位置。欢呼!
谁能对我如何完成这项艰巨的任务提出任何建议?
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";
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句