Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
#1

Один MediaPlayer для нескольких файлов - Программирование Android

09.08.2016, 18:22. Просмотров 344. Ответов 18
Метки нет (Все метки)

В приложении имеется несколько кнопок. По нажатию на каждую из них проигрывается MediaPlayer со своим звуком, то есть для каждой кнопки - свой звук. Можно ли как-то упростить задачу и использовать один MediaPlayer, в который по нажатию кнопки будет загружаться звук?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2016, 18:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Один MediaPlayer для нескольких файлов (Программирование Android):

Один обработчик для нескольких switch
Привет. Делаю приложение для управления устройством на ардуино по блютуз. Кое...

Один обработчик для нескольких ImageButton
Есть у меня несколько ImageButton на TableView. На них изображение. Создаю...

"constructor MediaPlayer in class MediaPlayer cannot be applied to given types"
Проблема в строке "37--final MediaPlayer mp = new...

MediaPlayer и новый поток для воспроизведения
Собственно читаю сейчас документацию, хочу сделать аудиоплеер, только не...

Объединение нескольких звуковых файлов
Всем добра. Каким образом может осуществить объединение выбранных аудифайлов в...

MediaPlayer автореверс
Всем привет,вопрос такое ,можно как нибудь сделать,чтоб в медиаплеере...

18
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
10.08.2016, 08:30 #2
turok09, давайте плееру разный звук, если звуки малые можно вообще саундпулл использовать
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 736
10.08.2016, 08:51 #3
Цитата Сообщение от turok09 Посмотреть сообщение
упростить задачу
в чем сложность?

можно так - записать один общий файл звуковой
и воспроизводить нужные интервалы
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
10.08.2016, 22:28  [ТС] #4
Как именно давать одному плееру разный звук?
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
11.08.2016, 01:36 #5
turok09, как тут уже сказали, тебе нужен SoundPool, а не MediaPlayer.
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 09:06 #6
Цитата Сообщение от turok09 Посмотреть сообщение
Как именно давать одному плееру разный звук?
да хоть через пересоздание
Java
1
mediaPlayer = MediaPlayer.create(this, R.raw.new_sound)
вот так через SoundPool
Java
1
2
3
4
5
            soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
            id1 = soundPool.load(this, R.raw.n1, 1);
            id2 = soundPool.load(this, R.raw.n2, 1);
            ...
            soundPool.play(id, 1, 1, 1, loop, 1);
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 11:20  [ТС] #7
Попробовал с mediaPlayer = MediaPlayer.create(this, R.raw.new_sound), получилось, но после закрытия этого экрана приложение останавливается. Не знаю, в чем проблема, до этого все работало. Думаю на метод onDestroy
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
 
public class FragmentFlatsMale extends Fragment implements View.OnClickListener {
    
    Button flats_btn1;
    Button flats_btn2;
    Button flats_btn3;
    Button flats_btn4;
    Button flats_btn5;
    Button flats_btn6;
    Button flats_btn7;
    Button flats_btn8;
    Button flats_btn9;
    Button flats_btn10;
    Button flats_btn11;
    Button flats_btn12;
    Button flats_btn13;
    Button flats_btn14;
    Button flats_btn15;
    Button flats_btn16;
    Button flats_btn17;
    Button flats_btn18;
    Button flats_btn19;
    Button flats_btn20;
    Button flats_btn21;
    Button flats_btn22;
    Button flats_btn23;
    Button flats_btn24;
    Button flats_btn25;
    Button flats_btn26;
    Button flats_btn27;
    Button flats_btn28;
    Button flats_btn29;
    Button flats_btn30;
    MediaPlayer flats;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {             
        
        View myView = inflater.inflate(R.layout.flats, container, false);
        
           // найдем View-элементы
           flats_btn1 = (Button) myView.findViewById(R.id.flats_btn1);
           flats_btn2 = (Button) myView.findViewById(R.id.flats_btn2);
           flats_btn3 = (Button) myView.findViewById(R.id.flats_btn3);
           flats_btn4 = (Button) myView.findViewById(R.id.flats_btn4);
           flats_btn5 = (Button) myView.findViewById(R.id.flats_btn5);
           flats_btn6 = (Button) myView.findViewById(R.id.flats_btn6);
           flats_btn7 = (Button) myView.findViewById(R.id.flats_btn7);
           flats_btn8 = (Button) myView.findViewById(R.id.flats_btn8);
           flats_btn9 = (Button) myView.findViewById(R.id.flats_btn9);
           flats_btn10 = (Button) myView.findViewById(R.id.flats_btn10);
           flats_btn11 = (Button) myView.findViewById(R.id.flats_btn11);
           flats_btn12 = (Button) myView.findViewById(R.id.flats_btn12);
           flats_btn13 = (Button) myView.findViewById(R.id.flats_btn13);
           flats_btn14 = (Button) myView.findViewById(R.id.flats_btn14);
           flats_btn15 = (Button) myView.findViewById(R.id.flats_btn15);
           flats_btn16 = (Button) myView.findViewById(R.id.flats_btn16);
           flats_btn17 = (Button) myView.findViewById(R.id.flats_btn17);
           flats_btn18 = (Button) myView.findViewById(R.id.flats_btn18);
           flats_btn19 = (Button) myView.findViewById(R.id.flats_btn19);
           flats_btn20 = (Button) myView.findViewById(R.id.flats_btn20);
           flats_btn21 = (Button) myView.findViewById(R.id.flats_btn21);
           flats_btn22 = (Button) myView.findViewById(R.id.flats_btn22);
           flats_btn23 = (Button) myView.findViewById(R.id.flats_btn23);
           flats_btn24 = (Button) myView.findViewById(R.id.flats_btn24);
           flats_btn25 = (Button) myView.findViewById(R.id.flats_btn25);
           flats_btn26 = (Button) myView.findViewById(R.id.flats_btn26);
           flats_btn27 = (Button) myView.findViewById(R.id.flats_btn27);
           flats_btn28 = (Button) myView.findViewById(R.id.flats_btn28);
           flats_btn29 = (Button) myView.findViewById(R.id.flats_btn29);
           flats_btn30 = (Button) myView.findViewById(R.id.flats_btn30);
           
           // присваиваем обработчик кнопкам
           flats_btn1.setOnClickListener(this);
           flats_btn2.setOnClickListener(this);
           flats_btn3.setOnClickListener(this);
           flats_btn4.setOnClickListener(this);
           flats_btn5.setOnClickListener(this);
           flats_btn6.setOnClickListener(this);
           flats_btn7.setOnClickListener(this);
           flats_btn8.setOnClickListener(this);
           flats_btn9.setOnClickListener(this);
           flats_btn10.setOnClickListener(this);
           flats_btn11.setOnClickListener(this);
           flats_btn12.setOnClickListener(this);
           flats_btn13.setOnClickListener(this);
           flats_btn14.setOnClickListener(this);
           flats_btn15.setOnClickListener(this);
           flats_btn16.setOnClickListener(this);
           flats_btn17.setOnClickListener(this);
           flats_btn18.setOnClickListener(this);
           flats_btn19.setOnClickListener(this);
           flats_btn20.setOnClickListener(this);
           flats_btn21.setOnClickListener(this);
           flats_btn22.setOnClickListener(this);
           flats_btn23.setOnClickListener(this);
           flats_btn24.setOnClickListener(this);
           flats_btn25.setOnClickListener(this);
           flats_btn26.setOnClickListener(this);
           flats_btn27.setOnClickListener(this);
           flats_btn28.setOnClickListener(this);
           flats_btn29.setOnClickListener(this);
           flats_btn30.setOnClickListener(this);
           
           return myView;  
           
    }
    
           @Override
            public void onClick(View v) {
                switch(v.getId()) {
                case R.id.flats_btn1:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn2:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn3:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn4:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn5:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn6:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn7:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn8:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn9:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn10:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn11:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn12:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn13:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn14:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn15:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn16:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn17:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn18:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn19:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn20:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn21:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn22:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn23:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn24:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn25:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn26:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn27:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn28:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn29:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                case R.id.flats_btn30:
                    flats = MediaPlayer.create(getActivity(), R.raw.carrier);
                    flats.start();
                    break;
                    
             }  
         }
 
            @Override
            public void onDestroy() {
                flats.release();
                
                super.onDestroy();
                
         }   
      }
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 11:27 #8
turok09, мне почему то кажется что неосвобождение плеера перед проигрыванием нового звука может привести к чему то нехорошему. +такое обилие звуков все таки тянет на SoundPool
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 736
11.08.2016, 11:40 #9
super.onDestroy(); первым идет
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 14:31  [ТС] #10
vxg, то есть надо после каждой загрузки звука и его проигрывания писать flats.release()?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 15:01 #11
turok09, прямо "надо" я вам не скажу так как таким способом плеер не использовал
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 17:28  [ТС] #12
Нашел причину остановки приложения. Когда пишешь так, то вылетает:
Java
1
2
3
4
5
@Override
            public void onDestroy() {
                flats.release();
                
                super.onDestroy();
А если так, то нормально, только плеер не очищается, а надо бы:
Java
1
2
3
4
@Override
            public void onDestroy() {                             
                
                super.onDestroy();
Как это исправить?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 17:47 #13
turok09, после супердестрой пробовали очищать?
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 18:02  [ТС] #14
vxg, да
Тут еще одна проблема: способ с загрузкой одному плееру разного звука влечет за собой то, что можно хоть сколько раз нажимать на кнопку и звук будет повторяться, как в SoundPool. А нужно все-таки, чтобы нажал на кнопку несколько раз и звук проигрывался только один раз, пока не закончится
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 18:06 #15
turok09, ничто не мешает при нажатии проверять что нужный звук уже звучит
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 18:07  [ТС] #16
vxg, писать типа что-то этого? А дальше как?
Java
1
if (mediaPlayer.isPlaying())
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 18:13 #17
turok09, как что? Узнать что плеер играет именно тот самый звук? Ну вы же его заставили играть-переменную какую нибудь завести можно в которой сохраняется ид если достать его обратно из плеера не выходит. И если это все играет просто ничего не делать.
0
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 20:22  [ТС] #18
vxg, а с release() что делать, который вызывает остановку приложения?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
11.08.2016, 23:47 #19
turok09, это ненормально. Причина может быть в том что во время исполнения дестрой релиз уже должен был быть вызван например при паузе
0
11.08.2016, 23:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2016, 23:47
Привет! Вот еще темы с решениями:

Регистрация MediaPlayer
Подскажите как зарегистрировать MediaPlayer, чтоб при открытии файла он...

Static MediaPlayer
Добрый день! Пытался реализовать следующий алгоритм работы своего приложения:...

SoundPool vs MediaPlayer
Какой класс лучше использовать для проигрывания музыки? Под музыкой...

Ошибка MediaPlayer'a
Здравствуйте форумчане.Создал кнопочку для проигрывания мелодии, но при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru