2013-10-12 3 views
1

Мое приложение играет звук монеты каждый раз, когда нажимается кнопка.Android Sound Reset

coin_sound.start(); 

Вы можете легко нажимать быстрее, чем звук монеты. Когда это произойдет, я хочу, чтобы звук монет начинался с самого начала с момента нажатия кнопки.

if(coin_sound.isPlaying()){ 
    coin_sound.reset(); 
    coin_sound = MediaPlayer.create(getContext(), R.raw.coin02); 
} 
coin_sound.start(); 

Проблема с этим заключается в том, что загрузка мультимедийного файла, как бы это ни было, по-прежнему является относительно медленным процессом. Когда вы начинаете быстро нажимать кнопку, приложение сильно отстает.

Есть ли какие-либо решения моей проблемы? Единственная идея, у меня есть что-то делать с массивом coin_sounds, но этот метод кажется, что это будет грязно и валовыми ...

ответ

1

Другой ответ, размещенный здесь, несколько правильный. Вы не должны называть create снова и снова.

Код в этом ответе имеет проблему. Метод reset отправляет MediaPlayer в незанятое состояние, где запрещено использовать большинство других методов. Если бы вы были идти по этому пути, вы должны вызвать методы в следующем порядке:

coin_sound.reset(); 
coin_sound.setDataSource(...); 
coin_sound.prepare(); 
coin_sound.start(); 

Разница между вызовом create и предыдущая последовательность вызовов метода является просто создание нового экземпляра. Это, однако, не самый быстрый способ сделать то, что нужно сделать.

Вы должны просто позвонить coin_sound.seekTo(0);, когда вы хотите, чтобы текущий воспроизводимый звук перезапустился. Так что-то вроде:

if (coin_sound.isPlaying()) coin_sound.seekTo(0); 
else coin_sound.start(); 

Это предполагает, что вы не оставили MediaPlayer в подготовленном состоянии, так start можно назвать. Вы можете это сделать, позвонив reset, setDataSource и prepare в прослушиватель onCompletion. Кроме того, убедитесь, что вы звоните release, когда звук больше не нужен.

0

Это потому, что вы инициирование coin_sound в случае нажатия кнопки, попробуй этот

инициировать эту переменную в вашем OnCreate метод

coin_sound = MediaPlayer.create(getContext(), R.raw.coin02); 

затем сделать этот код для кнопки

if(coin_sound.isPlaying()){ 
coin_sound.reset(); 
} 
coin_sound.start(); 

проблема вы recreatin g новый медиаплеер при каждом нажатии кнопки, чтобы новый медиаплеер не думал, что есть звук

, и вам нужно запустить его снова с coin_sound.start();? не перезапускает стоп, а затем запустите звук для вас?

+0

Согласно моим знаниям, RESET не перезапускает звук, который он удаляет. – java