Я пытаюсь воспроизводить случайный звук каждую минуту, который предлагает пользователю взаимодействовать с устройством. Я использую SoundPool, Timer и TimerTask, чтобы попытаться достичь этого. Когда воспроизводится звук, я также использую Logcat, чтобы увидеть идентификатор звука, который должен быть воспроизведен (это для целей исследования и анализа данных). Я попробовал несколько методов, которые включают инициализацию SoundPool внутри и вне метода run () TimerTask, а также освобождение SoundPool после нажатия кнопки. timer.Schedule используется для планирования запуска TimerTask. Должен ли я установить эти значения c?
LogCat регистрирует SoundId, но звук не воспроизводится последовательно. Например, он будет воспроизводить первый звук и регистрировать его, затем он будет регистрировать другие SoundId без воспроизведения звука. Это происходит, даже если кнопка была нажата и ресурсы SoundPool были освобождены. Иногда звук вообще не воспроизводится.
Может кто-нибудь посоветовать мне, почему это было бы непоследовательным или лучшим способом go сделать это, пожалуйста?
public class TouchscreenDashboard extends AppCompatActivity implements View.OnClickListener {
private SoundPool soundPool;
int[] sounds={R.raw.decrease_fan_speed_by_2, R.raw.decrease_fan_speed_by_5,
R.raw.increase_fan_speed1, R.raw.increase_fan_speed_by_3,R.raw.lower_temp1,
R.raw.lower_temp4, R.raw.raise_temp2, R.raw.raise_temp3 ,R.raw.skip_backwards_2_songs,
R.raw.skip_backwards_4_songs,R.raw.skip_forward_1_song, R.raw.skip_forward_5_songs,
R.raw.volume_down3,R.raw.volume_down6, R.raw.volume_up3, R.raw.volume_up5};
private Button volumeUp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
Log.i("DashboardActivity", "Dashboard has started");
Timer timer = new Timer() {};
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
.build();
soundPool = new SoundPool.Builder()
.setAudioAttributes(audioAttributes)
.build();
Random r = new Random();
int Low = 0;
int High = 16;
int random = r.nextInt(High-Low) + Low;
int soundId = soundPool.load(getApplicationContext(), sounds[random], 1);
soundPool.play(soundId, 1, 1, 0, 0, 1);
Log.i("DashboardActivity", "SoundId: " + random);
}
};
timer.schedule(timerTask, 60000, 60000);
volumeUp = findViewById(R.id.volumeUp);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.volumeUp:
if (volumeCount < 99) {
volumeCount++;
volumeText.setText(Integer.toString(volumeCount));
}
soundPool.release();
Log.i("DashboardActivity", "Volume Up Clicked");
break;
}
}
}