Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Фоновая музыка в играх и приложениях, каковы лучшие практики. Библиотеки [закрыт]

#java #android


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 7 месяцев назад.
                                                                                
           
                
        
Основной мой вопрос в том, что я хочу понять архитектуру подобного приложения. Какие
классы и с каким отношением встроить.

В игрушку собираюсь добавить фоновую музыку и естественно к такому плееру нужно иметь
доступ из разных классов, например я в меню - играет один трэк, перешел в игровое поле
- трэк другой или же из игрового поля иметь возможность приглушить фоновую музыку,
а на первый план вывести звуки из игры
, произошло игровое событие - воспроизвел другой звук ( в последнем случае, наверно
нужно создавать второй экземпляр класса для воспроизведения и раз такие звуки привязаны
к игровому полю, думаю достаточен один  SoundPool используя композицию)  Для класса
MediaPlayer так и напрашивается использовать шаблон синглтон. Еще вопрос: учитывая,
что в приложениях часто, и так же в моем случае, воспроизведение музыки должно прекращаться
при сворачивании приложения, то нужен ли мне Service?  Думаю что нет.  
В любом случае MediaPlayer должен находиться в доп. потоке, а значит нужен способ
общения с этим потоком, как это всё правильно реализуется?  И есть ли какие то связанные
с темой воспроизведения музыки библиотеки?
    


Ответы

Ответ 1



Если нужно воспроизведение звука и в момент когда приложение свернуто, то нужно конечно использовать Service. Если пишем какой нибудь плеер используем класс MediaController, он обрабатывает обратные вызовы от аппаратных кнопок, от подключенной гарнитуры и так далее, в общем полный контроль над воспроизведением музыки. Вот хорошая статья на этот случай. В случае описываемом в вопросе, когда воспроизведение звука нужно только в открытом приложении и должно контролироваться из разных активностей, применяем шаблон синглтон. (Думаю не стоит искать решение лучше так как для этого шаблон одиночка и существует. Альтернативой было бы передавать из одной активности в другую экземпляр MediaPlayer и писать лишний код) Т.е. создаем класс в котором есть экземпляр MediaPlayer и обращаемся к нему из любой активности. Как реализовать шаблон одиночка в андроид есть тут , вот статья о правильной реализации этого шаблона в Java. А теперь насчет того в каком потоке с этим MediaPlayer работать. Само воспроизведение музыки процесс не ресурсоемкий, поэтому можно смело стартовать в главном потоке. А вот загрузка этого ресурса может занимать время. Если ресурс находится в самом приложении или это какой нибудь файл с флешки, то смело работаем в главном потоке, если это загрузка по сети или поток, то для нас у MediaPlayer есть метод prepareAsync(), который произведет подготовку ресурса в отдельном потоке, а по завершению вернет CallBack. В прочем вот разбор MediaPlayer Насчет библиотек: я ничего не искал, т.к. MediaPlayer это уже так сказать библиотека, в нем реализовано всё самое основное.

Ответ 2



Ну а для простых звуков, если небольшой длительности, в игре лучше использовать класс AudioTrack, а файлы готовить в PCM формате. Будет быстрее реакция на действия в игре. А фоновую музыку использовать MediaPlayer.

Комментариев нет:

Отправить комментарий