Possible SoundPool broken method: load(String path, int priority)

I think this will never garner enough support by anyone who wishes to delve themselves deeper into such mystery.

All of you probably knew by now, how unstable and how unreliable SoundPool class is. Some people manage to make it work, while others rage-quit themselves after tackling the problem many times.

One of methods in SoundPool grabbed my attention, and it’s this method:

load(String path, int priority)

Some sources in Stack Overflow suggests that method should not be used at all, and instead recommends other load() methods. There are no solutions to using the aforementioned code. This is a mystery. There is 1 source I found earlier (but can’t find it again) that suggests the path parameter may stands for the path directory to an audio file located on the SD card, or in the external storage in some Android phones. I don’t have the knowledge to prove it, so I can’t tell.

Here’s my research, and wished others may help find a better solution to this:

//These will not load. Gives error:         
/*     error loading <[i]string goes here[/i]> */         
/*     sample 0 NOT ready                      */               
sounds.play(sounds.load("assets/test", 1), 1f, 1f, 1, 0, 1f);         
sounds.play(sounds.load("/assets/test", 1), 1f, 1f, 1, 0, 1f);         
sounds.play(sounds.load("assets/test.wav", 1), 1f, 1f, 1, 0, 1f);         
sounds.play(sounds.load("/assets/test.wav", 1), 1f, 1f, 1, 0, 1f); 

/*sounds is a SoundPool variable initialized in the onResume(). All of these methods are placed in a 
setOnClickListener.onClick(View v) wrapped/set for a Button object in the R.layout.main.*/

Feel free to share your findings. :expressionless:

EDIT: Just to clarify, I am able to successfully use SoundPool to play sounds. I do not have any problems with the following methods:


//All of these load correctly. It can be played from my phone.
load(Context context, int resId, int priority);
load(FileDescriptor fd, long offset, long length, int priority);
load(AssetFileDescriptor afd, int priority);

The only load() method that is unable to work is the load(String path, int priority) method.

All of these below are basically my hunch. I have still not confirmed that the method described works as intented. Again, please feel free to correct me and help out on this research. :smiley:


It’s possible that the path in the method load(String path, int priority) stands for the path to an audio file located on the SD card. Am I correct?

I do not know. Nor do I know anything that says the path is for the entire path directory to the audio file in the SD file, by the Documentation. It doesn’t say, and probably nobody cares about it.

I think it’s confirmed that the “path” may or may not stands for the directory to the SD card on the Android phone. To fetch a more reliable directory (a starting point, like C:> in cmd.exe of Windows variants), use helper methods, such as “Environment.getExternalStorageDirectory()”.

path may have different starting points in different devices, even if the devices in question is not a tablet, nor a phone. It could me /mnt/sda5, /mnt/card, etc. It is declared by the manufacturer what the Environment variables are.

This is also a good way to learn more things while doing research. For now…