2014-03-01 28 views
0

我想開發一個遊戲,它使用一首歌曲。這首歌是作爲背景音樂播放的。filenotfoundexception當引用文件路徑

我想分析音頻頻譜的當前頻率並輸出其值。我已經使用FFT算法來獲得頻率,但現在我需要獲得歌曲的長度。所以我正在使用此代碼:

FileHandle filemain = Gdx.files.internal("data/determination.mp3"); 
     File file = new File(filemain.toString()); 
     AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); 
     AudioFormat format = audioInputStream.getFormat(); 
     long audioFileLength = file.length(); 
     int frameSize = format.getFrameSize(); 
     float frameRate = format.getFrameRate(); 
     float durationInSeconds = (audioFileLength/(frameSize * frameRate)); 

但是,它然後返回FILENOTFOUNDEXCEPTION。使用Gdx.files.internal("data/determination.mp3");它工作正常。但我不能在AudioInputSream聲明中使用它,因爲它需要一個文件,而不是文件句柄。如果我像上面那樣使用AudioInputStream中的文件路徑,它將返回錯誤。

我哪裏錯了?我該如何解決這個問題?

+0

我猜你不是在尋找那個文件的地方。 –

+0

提示:打印出filemain.toString()。這是一個有效的文件路徑,還有一個在當前目錄的上下文中引導你想要的文件? (我猜你的Gdx文件可能在某種類似zip的容器中,無法通過正常的文件打開操作來解決。) –

+0

它正在打印出正確的文件路徑。那麼爲什麼它可用於GDX而不是文件操作? – user3241507

回答

-1

查看File 7對象的Java 7 API,特別是關於構造函數的部分,它看起來好像該對象需要使用一個String來構造,該String爲文件或URI提供了正確的文件路徑。

退房此鏈接到所有可用的重載構造的文件位置:docs.oracle.com/javase/7/docs/api/java/io/File.html#constructor_summary

試試這個:給MP3文件的位置作爲一個String對象,就像你做的文件句柄對象的構造文件對象的構造。或者,將.mp3放在文件系統的其他位置,並嘗試用絕對路徑調用它。

如果這不起作用諮詢本文檔的各種方式從文件中讀取和創建在遊戲引擎文件句柄對象:Different ways to construct FileHandle objects

這也對文件句柄對象API一串信息:FileHandle API

祝你好運與你的視頻遊戲。我想嘗試一下你遊戲中使用的遊戲引擎。無論是這個還是jMonkey3D遊戲引擎。 :D

+0

我知道它不會採用** FileHandle **對象引用,但是當我嘗試引用沒有文件句柄的文件時,它給了我一個filenotfoundexcetion – user3241507

+0

我編輯了我的答案,並考慮了這些信息。讓我知道它是否可用於plox。 :D –

+0

這給了我FileNotFoundException錯誤,這就是爲什麼我發佈的問題。似乎沒有辦法解決這個問題:( – user3241507