Я хочу воспроизводить звук каждый раз при нажатии на представление:
Я создал простой проигрыватель эффектов:
public class EffectManager {
private static SoundPool soundPool;
private static int puzzlePieceOK;
private static int puzzleOK;
public static void init(Context context) {
if (soundPool == null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
soundPool = new SoundPool.Builder()
.setAudioAttributes(new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_GAME)
.build()
)
.setMaxStreams(10)
.build();
}
else {
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 1);
}
puzzlePieceOK = soundPool.load(context,R.raw.puzzle_piece_ok,1);
puzzleOK = soundPool.load(context,R.raw.puzzle_ok,1);
}
}
public static void playPuzzlePieceOK() {
soundPool.play(puzzlePieceOK,10,10, 1,0,1);
}
public static void playPuzzleOK() {
soundPool.play(puzzleOK,10,10, 1,1,1);
}
}
Я вызываю EffectManager.init
по событию onCreate
моей активности. Затем я добавляю этот слушатель в свои представления:
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EffectManager.playPuzzlePieceOK();
}
});
Я мог слышать звук, когда я нажимаю только на первый вид. Пробовал другой порядок нажатия просмотров, звук играет только при первом нажатии. У меня нет никаких сообщений об ошибках на консоли, кроме этого предупреждения. :
W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by server
Это предупреждение появляется только при первом нажатии.