2012-08-23 17 views
3

我想從android載入聲音。 聲音在res/raw/myownsound.wav之下。 我知道我可以使用已經加載聲音:Android Soundpool Load(字符串路徑,int優先級)

soundPool.load(context, R.raw.myownsound, 1) 

對於定製的目的,我想利用來加載它:

soundPool.load("res/raw/myownsound", 1) 

...但我得到以下錯誤:error loading res/raw/myownsound。 我也試過如下:

soundPool.loadSound("android.resource://upg.GraphismeBase/raw/myownsound", 1) 

..但我得到一個錯誤還有:error loading android.resource://upg.GraphismeBase/raw/myownsound

什麼是使用soundPool.load的正確方法(路徑優先)?

回答

4

簡單的工作方式。 它通過在運行時獲取標識符ID來按名稱加載資源。

int sound_id = mContext.getResources().getIdentifier("myownsound", "raw", 
                mContext.getPackageName()); 
soundPool.load(mContext, sound_id, 1); 

它也裝載繪項目或XML文件,由"drawable""xml"例如更換"raw"

6

在項目中創建一個文件夾結構

/assets/sounds/data/ 

再就是複製您的wav文件。

// Declare globally if needed 
int mySoundId; 
SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
AssetManager am = this.getAssets(); 

//Use in whatever method is used to load the sounds 
try { 
    mySoundId = soundPool.load(am.openFd("sounds/data/myownsound"), 1); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

可以試試這個(不知道它的工作):有一個名爲mContext背景下這樣做的

​​
+1

那麼,這肯定是一個工作的答案,但我真的很想知道如何使用純路徑版本,而不是FileDescriptor。 –

+0

我推出了第二種方法,可能這是你想要的 –

+0

你在哪裏導入Field類? –