Воспроизводим звук
Воспроизводим звук
Добрый день. Понадобилось написать одну простенькую прогу на андроид. С java до этого не был знаком. Разобрался почти во всем что мне нужно, кроме звука. Необходимо программно воспроизводить один из 14 .wav файлов. Сделал пока "влоб"
1.Описываю 14 объектов MediaPlayer
MediaPlayer mp0;
...
MediaPlayer mp13;
2. Создаю массив
MediaPlayer [] mp= {mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mp10,mp11,mp12,mp13};
3. Создаю элементы массива
mp[0]=MediaPlayer.create(this, R.raw.w0);
...
mp[13]=MediaPlayer.create(this, R.raw.w13);
4. Вызываю когда нужно
mp[N].start();
Понимаю что это ужасно коряво, подскажите как сделать правильно и в каком блоке кода я должен освобождать объекты MediaPlayer
Спасибо
1.Описываю 14 объектов MediaPlayer
MediaPlayer mp0;
...
MediaPlayer mp13;
2. Создаю массив
MediaPlayer [] mp= {mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mp10,mp11,mp12,mp13};
3. Создаю элементы массива
mp[0]=MediaPlayer.create(this, R.raw.w0);
...
mp[13]=MediaPlayer.create(this, R.raw.w13);
4. Вызываю когда нужно
mp[N].start();
Понимаю что это ужасно коряво, подскажите как сделать правильно и в каком блоке кода я должен освобождать объекты MediaPlayer
Спасибо
Re: Воспроизводим звук
а почему 6ы не создать плеер 1 раз и давать ему разные файлы когда нужно ?
CEO of a company R.id.team
Re: Воспроизводим звук
А можно ссылки на примеры? Те что я нашел, не помогли мне создать рабочий кодFinch писал(а):а почему 6ы не создать плеер 1 раз и давать ему разные файлы когда нужно ?
Re: Воспроизводим звук
Код: Выделить всё
class SomeClass {
MediaPlayer mp;
public void playSound(int number) {
int fileId = -1;
switch(number) {
case 0: fileId = R.raw.mp0; break;
case 1: fileId = R.raw.mp1; break;
...
case 13: fileId = R.raw.mp13; break;
}
if (fileId != -1) {
mp.create(this, fileId);
mp.start();
}
}
}
Re: Воспроизводим звук
Большое спасибо. Заработало только когда я вместо
mp.create(this, fileId);
написал
mp=MediaPlayer.create(this, fileId);
Я правильно понимаю что в данном случае (при создании объекта внутри функции playSound), по ее завершению объект MediaPlayer убивается системой автоматически?
mp.create(this, fileId);
написал
mp=MediaPlayer.create(this, fileId);
Я правильно понимаю что в данном случае (при создании объекта внутри функции playSound), по ее завершению объект MediaPlayer убивается системой автоматически?
Re: Воспроизводим звук
нет, нужно вызывать mp.release(); когда выходишь из приложения
Код: Выделить всё
@Override
protected void onDestroy() {
mp.release();
super.onDestroy();
}
CEO of a company R.id.team
Re: Воспроизводим звук
Тогда не совсем понятно, ведь судя по коду объект MediaPlayer создается при каждом вызове функции playSound(). Если при завершении функции он не убивается, значит каждый вызов порождает новый объект и их нужно как-то убивать самому. как?Finch писал(а):нет, нужно вызывать mp.release(); когда выходишь из приложения
Столкнулся с тем, что после 20-го вызова функции воспроизведения приложение вылетает по ошибке. Не может быть причина именно в этом? Как исправить?
Попробовал так
Код: Выделить всё
mp=MediaPlayer.create(this, fileId);
mp.start();
try {Thread.sleep(2000);}
catch (InterruptedException e) {
e.printStackTrace();
}
mp.release();
Re: Воспроизводим звук
побольше почитай доки, там очень много написано про медиаплеер, главное понять диаграмму состояний. "В любом случае, при завершении процесса проигрывания необходимо
вызвать метод release из объекта MediaPlayer, чтобы освободить соответ-ствующие ресурсы" - это тебе из Рето Майера, там не много но можешь почитать. И в конце концов если ошибки вылетают то пости их сюда, телепаты в отпуске
вызвать метод release из объекта MediaPlayer, чтобы освободить соответ-ствующие ресурсы" - это тебе из Рето Майера, там не много но можешь почитать. И в конце концов если ошибки вылетают то пости их сюда, телепаты в отпуске
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Воспроизводим звук
krotov, есть прекрасный интерфейс OnCompletionListener
Код: Выделить всё
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// твои действия
}
});
CEO of a company R.id.team