Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
#1

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

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

В приложении имеется несколько кнопок. По нажатию на каждую из них проигрывается MediaPlayer со своим звуком, то есть для каждой кнопки - свой звук. Можно ли как-то упростить задачу и использовать один MediaPlayer, в который по нажатию кнопки будет загружаться звук?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
10.08.2016, 08:30     Один MediaPlayer для нескольких файлов #2
turok09, давайте плееру разный звук, если звуки малые можно вообще саундпулл использовать
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 724
10.08.2016, 08:51     Один MediaPlayer для нескольких файлов #3
Цитата Сообщение от turok09 Посмотреть сообщение
упростить задачу
в чем сложность?

можно так - записать один общий файл звуковой
и воспроизводить нужные интервалы
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
10.08.2016, 22:28  [ТС]     Один MediaPlayer для нескольких файлов #4
Как именно давать одному плееру разный звук?
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
11.08.2016, 01:36     Один MediaPlayer для нескольких файлов #5
turok09, как тут уже сказали, тебе нужен SoundPool, а не MediaPlayer.
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 09:06     Один MediaPlayer для нескольких файлов #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);
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 11:20  [ТС]     Один MediaPlayer для нескольких файлов #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();
                
         }   
      }
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 11:27     Один MediaPlayer для нескольких файлов #8
turok09, мне почему то кажется что неосвобождение плеера перед проигрыванием нового звука может привести к чему то нехорошему. +такое обилие звуков все таки тянет на SoundPool
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 724
11.08.2016, 11:40     Один MediaPlayer для нескольких файлов #9
super.onDestroy(); первым идет
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 14:31  [ТС]     Один MediaPlayer для нескольких файлов #10
vxg, то есть надо после каждой загрузки звука и его проигрывания писать flats.release()?
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 15:01     Один MediaPlayer для нескольких файлов #11
turok09, прямо "надо" я вам не скажу так как таким способом плеер не использовал
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 17:28  [ТС]     Один MediaPlayer для нескольких файлов #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();
Как это исправить?
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 17:47     Один MediaPlayer для нескольких файлов #13
turok09, после супердестрой пробовали очищать?
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 18:02  [ТС]     Один MediaPlayer для нескольких файлов #14
vxg, да
Тут еще одна проблема: способ с загрузкой одному плееру разного звука влечет за собой то, что можно хоть сколько раз нажимать на кнопку и звук будет повторяться, как в SoundPool. А нужно все-таки, чтобы нажал на кнопку несколько раз и звук проигрывался только один раз, пока не закончится
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 18:06     Один MediaPlayer для нескольких файлов #15
turok09, ничто не мешает при нажатии проверять что нужный звук уже звучит
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 18:07  [ТС]     Один MediaPlayer для нескольких файлов #16
vxg, писать типа что-то этого? А дальше как?
Java
1
if (mediaPlayer.isPlaying())
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 18:13     Один MediaPlayer для нескольких файлов #17
turok09, как что? Узнать что плеер играет именно тот самый звук? Ну вы же его заставили играть-переменную какую нибудь завести можно в которой сохраняется ид если достать его обратно из плеера не выходит. И если это все играет просто ничего не делать.
turok09
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 45
11.08.2016, 20:22  [ТС]     Один MediaPlayer для нескольких файлов #18
vxg, а с release() что делать, который вызывает остановку приложения?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2016, 23:47     Один MediaPlayer для нескольких файлов
Еще ссылки по теме:

Android Static MediaPlayer
Android Ошибка MediaPlayer'a
Вылет приложения с MediaPlayer Android
Android Регистрация MediaPlayer
Android MediaPlayer и новый поток для воспроизведения

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
11.08.2016, 23:47     Один MediaPlayer для нескольких файлов #19
turok09, это ненормально. Причина может быть в том что во время исполнения дестрой релиз уже должен был быть вызван например при паузе
Yandex
Объявления
11.08.2016, 23:47     Один MediaPlayer для нескольких файлов
Ответ Создать тему
Опции темы

Текущее время: 05:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru