2013-09-21 72 views
3

所以我想使用相對路徑將聲音文件加載到緩衝區中。 (我把我的東西放在版本控制之下,不想做任何關於某人可能在其文件系統上克隆回購的假設)。如何提供Buffer.read的相對路徑?

所以,我最初假設如果我提供了一條相對看起來相對的路徑,那麼SC會將其解釋爲與正在執行的文件的位置有關:

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

但是SC無法找到該文件。於是我擡起頭asAbsolutePath,並試圖指出:

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

這不起作用,或者是因爲SC無法從我的親戚一個鍛鍊的絕對路徑。

"Samples/HiHats1.hihat2.wav".asAbsolutePath 

...實際上在我的文件系統上返回一個不存在的位置。歡呼!

任何人都可以提出任何建議,我可以如何實現這個麻煩的任務?

回答

10

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"; 
+0

再次感謝解決方案和解釋。 – David