Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java ME (J2ME) > MMAPI - проигрывание одновременно нескольких миди |
Автор: 604 21.11.2006, 21:28 |
Привет! Возникла такая проблема! Требуется по наступлению некого события проиграть миди... но проблема в том что в след. раз это событие может наступить быстрее чем отыграет музыка... Попробывал setMediaTime(0) что бы просто с начало игралось.. на стандартном эмуле работает.. на эмуле BS S68 звука нет эксепшенов нет... а телефон выкидывает эксепшен Error setting media time ![]() Попробовал другой вариант, создать 2 плеера и в зависимости от того какой занят игрой запускать второй, и наоборот. В стандартном эмуле работает на эмуле S68 нет, на телефоне почему то 1 плеер залипает в состоянии СТАРТЕД :-( Хе хе.. getDuration() возвращает -1... теперь понятно почему setMediaTime не работает :-( |
Автор: Dancer 22.11.2006, 11:43 |
ориентируйся на то, что два плеера у тебя многие девайсы поддерживать не будут (можно сказать почити все), я имею ввиду из мидлета. Поэтому создай класс, который у тебя будет мониторить твой текущий плеер. И если тебе критично проигрывать что-то в тот момент как это пришло, то либо останавливаешь, то что у тебя в данный момент играет, то есть делаешь остановку плеера и проигрование нужно файлика запускаешь. Или же делаешь очередь из того, что нужно проигрывать. И помере проигрывания кусочков (файликов), ты очищаешь совю очередь до полного её изничтожения ![]() |
Автор: 604 22.11.2006, 13:28 |
Dancer, Вот блин.. а что же делать с тормозами вo время остановки и запуска миди? Такой код приводит к жутким фризам даже на стандартном эмуляторе: player.stop(); player.start(); а если еще учесть что надо будет подгрузить новый звук... будет еще хуже :-( |
Автор: Dancer 22.11.2006, 13:36 |
во первых огранизовать в отдельно потоке работу с плеером, плюс я делал (правда не с мидюшками), вектор, в котором у меня уже были готовые объекты типа плеер, и я их просто брал из вектора и проигрывал. Ты скорее всего каждый раз откуда то пытаешься подгружать свои сэмплы (с тЫрнета или из JAR, а может быть и из файловой системы телефона) для проигрывания, попробуй это как то минимизировать. Ну или опиши, что ты пытаешься делать немного более развёрнуто, и что ты этим хочешь получить. |
Автор: 604 22.11.2006, 14:17 | ||
Вот мой класс
На стандартном эмуляторе все отлично, на эмеле BenqSiemens S68 вобще ничего не слышно, изредко доносится какой то скрежет. На железе ситуация следующая: если сработала ситуация из case 1. а потом сразу же из 2(при этом свук 1 еще должен играть) звук1 пропадает и начинает играть звук 2. А потом все становится еще хуже... плеер 1 непредсказуемо залипает в состоянии STARTED и соответственно дальнейшие его запуски игнорируются. В идеале хотелось что бы звуки накладывались друг на друга... а еще лучше перезапускать звук если сработало то же событие быстрее чем играется звук |
Автор: Dancer 23.11.2006, 10:24 |
604, звини, хотел дома посмотреть, но времени не оказалось. Попробую сегодня в течении дня, ну или погоди до завтра. Дома вечером - точно погоняю. |
Автор: 604 27.11.2006, 20:17 |
Всем еще раз привет! Выяснил все эксперементальным путем!(относится к проигрыванию миди на BenqSiemens S68) 1. Одновременно может играть только 1 плеер. 2. одновременно может быть prefetch() только 1 плеер. 3. методы setMediaTime и getMediaTime не реализованы (спасибо большое сименс) Мой код глюкал, поскольку prefetch() были все 3 плеера. Исходя из всего этого получается: Если мы тормознули звук, а потом снова захотели его запустить, он начинает играть с прерваного места. Это правильно, но поскольку метод setMediaTime не реализован, запустить звук с начала мы не можем ![]() ![]() |