На вашем месте я бы использовал класс SoundPool для этого. С помощью SoundPool вы можете установить количество одновременно воспроизводимых потоков, поэтому, установив это значение в 1, вы можете просто вызывать play () снова и снова, и самый последний звук, который вы слышите, - это самый последний вызов play ().
Взгляните на мое сообщение некоторое время назад. У него есть пример класса SoundPool в вопросе.
Edit:
Вы пытались создать новый экземпляр и вызывать prepare () каждый раз, когда хотите запустить новый звук?
mediaplayer = new MediaPlayer();
mediaplayer.setDataSource(path);
mediaplayer.prepare();
mediaplayer.start();
Хотя сейчас, когда я об этом думаю, я почти уверен, что вам нужно сделать это, только если вы используете файл с SD-карты, а не из своих ресурсов ... Хммм.