установите звуковые атрибуты в SoundPool.Класс компоновщика для API 21
Я следую серии видео лекций по программированию Android, которая была разработана в pre-API 21 раз. Поэтому он говорит мне создать переменную SoundPool следующим образом.
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
однако я хочу использовать этот SoundPool для API 21. Итак, я делаю это:
if((android.os.Build.VERSION.SDK_INT) == 21){
sp21 = new SoundPool.Builder();
sp21.setMaxStreams(5);
sp = sp21.build();
}
else{
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
}
формовочная машина модели sp21-переменная Builder
тип для API 21 и sp имеет SoundPool
тип.
это очень хорошо работает с моим AVD с API 21 и реальным устройством с API 19. (Не пробовал с реальным устройством с API 21, но я думаю, что он будет работать хорошо). Теперь я хочу установить streamType
to USAGE_MEDIA
в if-блоке перед sp = sp21.build();
. Поэтому я набираю:
sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
но корпия помечает его красным и говорит:
метод setAudioAttributes (AudioAttributes) в типе SoundPool.Конструктор неприменим для Аргументов (int)
Я знаю, что даже если я не установлю его в USAGE_MEDIA, он будет установлен на то же самое по умолчанию. Но я прошу будущей ссылки, если мне нужно установить ее на что-то еще, например : USAGE_ALARM.
как я должен поступить ?
Пожалуйста, Помогите!
Я говорил Аудио Атрибутов, SoundPool, SoundPool.строитель!--30--> и AudioManager.
2 ответов
экземпляр AudioAttributes создается через его построитель AudioAttributes.Строитель.
вы можете использовать его следующим образом.
sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
Ref:https://developer.android.com/reference/android/media/AudioAttributes.html
мне нужно кое-что добавить. Я использовал SoundPool в своем игровом приложении для воспроизведения небольших и простых аудиофайлов ogg. Он отлично работал даже на эмуляторах с API 21. Сегодня я решил изменить его, чтобы использовать SoundPool.Строитель.)(
Я посмотрел на SoundPool Андроида.Документ застройщика. Он говорит, что есть
public static class
SoundPool.Builder
extends Object
java.lang.Object
↳ android.media.SoundPool.Builder
Class Overview
Builder class for SoundPool objects.
обратите внимание на строку " класс Builder для объектов SoundPool." Так SoundPool.Builder () создает объект SoundPool. SoundPool () также создает объект SoundPool. Так вот что я делавший.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttrib = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
mSound = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
}
else {
mSound = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
}
mSound объявляется как
private SoundPool mSound;
остальная часть кода (где я загружаю, играю, останавливаю, выпускаю звук) остается точно такой же, как и раньше. И он работает в API 21 и более ранних версиях
надеюсь, это поможет вам все