2011-01-12 117 views
32

我想基於點擊按鈕來播放音頻文件。我已經定義了onClickListener()方法和佈局文件。當我的wav文件添加到res/目錄,我得到下面的生成錯誤:用於在Android中存儲音頻文件的目錄

invalid resource directory name temp.wav /hello/res line 1 Android AAPT Problem

我的問題如下:
1.目錄,我需要的音頻文件存儲在?目前他們在res /文件夾中。
2.另外,mp.setDataSource("/res/temp.wav")正確的方式來調用媒體播放器?

回答

-19

不要把媒體文件內res/

將一個名爲/ SD卡/音頻文件夾中的文件(temp.wav)(如果您使用的是仿真器)。

,並做到這一點:

mp.setDataSource("/sdcard/audio/temp.wav"); 
+0

那麼當我嘗試在真實的手機上安裝應用程序時,如何進行此更改?我的意思是,上述修補程序僅對模擬器有效嗎? – Sriram 2011-01-12 09:21:28

+0

不,即使你打算把它放在一個真正的手機上,請確保文件在相應的路徑中(該路徑可以是任何你喜歡的,但不要放在res /中)。 – Sen 2011-01-12 09:31:23

+3

我正要爲我的Android應用程序添加一些聲音效果,並且在遇到此問題時正在尋找幫助,以便將它們放在哪裏。我真的不明白這個答案是如何被接受的。這毫無幫助。據我可以告訴res/raw是放置音效和類似物的絕佳地方。由於res/raw文件的大小有限制,我想MP3和其他大文件應放在/ assets文件夾中? – britzl 2013-02-06 08:50:34

12

希望這將有助於:

raw/

Arbitrary files to save in their raw form. To open these resources with a raw InputStream, call Resources.openRawResource() with the resource ID, which is R.raw.filename.

However, if you need access to original file names and file hierarchy, you might consider saving some resources in the assets/ directory (instead of res/raw/). Files in assets/ are not given a resource ID, so you can read them only using AssetManager.

它從dev guide的。

[編輯:但我不認爲這是一個好主意,把你的音樂文件到res目錄在所有 - 這取決於什麼是這些文件的目的]

76

的音頻文件可以被移動到一個名爲raw的文件夾,它應該在res文件夾中創建。

它可以通過下面的代碼訪問:

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.soundclip); 
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mPlayer.start(); 

這是最簡單的方法。您可以試試它..

2

請注意,準備工作可能需要一些時間,因此可能會減慢用戶與您應用的互動。請參閱開發筆記here,特別是異步準備部分!

如果文件大小小於1MB,您也可以使用SoundPool。這會爲您處理與UI線程的同步。這是一個very useful article關於它的使用(拉爾斯有很多很棒的文章!)。

相關問題