我正在尝试从Android加载声音。
声音在res/raw/myownsound.wav
下。
我知道我已经可以使用以下方式加载声音:
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(路径,优先级)的正确方法是什么?
答案 0 :(得分: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();
}
可以尝试这个(不确定它的工作原理):
SoundPool mySoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
int myAudioFile = getResId("claps", R.raw.class);
try{
mySoundPool.load(context.getActivity(),myAudioFile,1);
} catch (Exception e){
message = String.valueOf(e);
}
public static int getResId(String variableName, Class<?> c) {
Field field = null;
int resId = 0;
try {
field = c.getField(variableName);
try {
resId = field.getInt(null);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return resId;
}
答案 1 :(得分:5)
使用名为mContext
的上下文执行此操作的简单方法。
它通过在运行时获取标识符id按名称加载资源。
int sound_id = mContext.getResources().getIdentifier("myownsound", "raw",
mContext.getPackageName());
soundPool.load(mContext, sound_id, 1);
例如,将"raw"
替换为"drawable"
或"xml"
,也可以加载drawables或xml文件。