2014-11-23 61 views
1

好的,所以我正在處理Processing中的一個簡單的fft可視化,並且認爲每次播放不止一首歌曲會很有趣。最後,我手動添加了3首歌曲,並使用預定義的字符串隨機在歌曲之間進行鼠標單擊更改。我想添加剩餘的電腦音樂,但每次我想要爲草圖添加一首新歌曲時,我都必須將其名稱複製並粘貼到草圖中的字符串中。似乎很多不必要的工作根據Processing中的文件夾中的文件創建一個自我更新字符串

有沒有辦法進行處理掃描文件夾,識別裏面有多少文件,並將所有文件名複製到字符串中?我找到一個名爲sDrop的庫來處理1.1,它可以讓你直接拖放文件到草圖中。但是,這在處理版本2+中似乎不再存在。

下面是一個簡單的版本,我目前工作的代碼來播放音樂:

import ddf.minim.spi.*; 
import ddf.minim.signals.*; 
import ddf.minim.*; 
import ddf.minim.analysis.*; 
import ddf.minim.ugens.*; 
import ddf.minim.effects.*; 

AudioPlayer player; 
Minim minim; 

String [] songs = { 
    "song1.mp3", 
    "song2.mp3", 
    "song3.mp3", 
}; 

int index; 


void setup() { 
    size(100, 100, P3D); 
    index = int(random(songs.length)); 

    minim = new Minim(this); 
    player = minim.loadFile(songs[index]); 
    player.play(); 
} 

void draw() { 
} 


void mouseClicked() { 
    index = int(random(songs.length)); 

    player.pause(); 
    player = minim.loadFile(songs[index]); 
    player.play(); 
} 

如果任何人有意見或會引導我走向一個很好的教程,這將是巨大的。謝謝!

回答

0

假設你在Java模式用這個,那麼你可以使用Java API:https://docs.oracle.com/javase/8/docs/api/

Java的API包含包含用於讀取目錄的內容幾種方法File類:https://docs.oracle.com/javase/8/docs/api/java/io/File.html

事情是這樣的:

ArrayList<String> songs = new ArrayList<String>(); 
File directory = new File("path/to/song/directory/"); 
for(File f : directory.listFiles()){ 
    if(!f.isDirectory()){ 
     songs.add(f.getAbsolutePath()); 
    } 
} 

谷歌搜索「目錄中的Java列表文件」將產生你一噸的結果。

+0

真棒的感謝!我花了一段時間才意識到我需要在目錄名稱而不是\的路徑中使用\\。因此「C:\\ Users \\ username \\ etc \\ etc」而不是「C:\ Users \ username \ etc \ etc」。但是一旦我這樣做了代碼就完美了。 你能告訴我什麼!f代表什麼?我把它理解爲「不」,但在這種情況下對我來說沒有意義。 同時感謝您向我展示API是什麼。我對它的龐大程度感到不知所措,但這對未來會有很大的幫助! – 2014-11-24 18:35:00

+1

String中的單個\是一個轉義字符。例如,「\ n」代表「換行符」。所以當你需要鍵入一個實際的\而不是一個轉義字符時,你必須轉義\,這使得它「\\」。而f變量是File的一個實例,它有一個返回布爾值的isDirectory()方法。我正在使用!f.isDirectory()基本上說「如果這個文件不是一個目錄,那麼它一定是一首歌」。 – 2014-11-24 18:45:44

+0

感謝您的理解。我認爲現在對我來說很有意義。至少直到下一次它打破:) – 2014-11-24 19:09:10

0

我想補充凱文的工人的回答是:

  1. 嘗試使用File.separator,而不是「/」或「\」。它也做同樣的事情,但它會根據您使用的操作系統找出正確的方向,因此您可以在其他計算機上移動草圖並保持其正常工作。
  2. 退房丹尼爾Shiffman的附帶處理中例子>專題>文件IO> DirectoryList
相關問題