MediaPlayer base_sound;
MediaPlayer action_sound;
public void onClick(View v) {
case R.id.btButton:
if (initialized == false) {
baseSound();
} else {
mChatService.stop();
stopPlaying();
rpmText.setText("0");
}
break;
....
}
private final Handler mHandler = new Handler() {
....
case MESSAGE_READ:
....
if (RPM_value > 900) {
if (action_sound == null) {
base_sound.stop();
base_sound.release();
base_sound = null;
SoundRacerActivity.this.actionSound();
}
action_sound.start();
int currVol = RPM_value / 300;
audioManager1.setStreamVolume(
AudioManager.STREAM_MUSIC, currVol, 0);
} else {
if (base_sound == null) {
action_sound.stop();
action_sound.release();
action_sound = null;
SoundRacerActivity.this.baseSound();
}
base_sound.start();
audioManager1.setStreamVolume(
AudioManager.STREAM_MUSIC, SOUND_SET, 0);
}
.....
}
private void stopPlaying() {
if (action_sound != null) {
action_sound.stop();
action_sound.release();
action_sound = null;
} else {
base_sound.stop();
base_sound.release();
base_sound = null;
}
}
private void baseSound() {
base_sound = MediaPlayer.create(SoundRacerActivity.this,
R.raw.porsche_911_gt3_rs_basics);
base_sound.setAudioStreamType(AudioManager.STREAM_MUSIC);
base_sound.setLooping(true);
}
private void actionSound() {
action_sound = MediaPlayer.create(SoundRacerActivity.this,
R.raw.porsche_911_gt3_rs_exhaust);
action_sound.setAudioStreamType(AudioManager.STREAM_MUSIC);
action_sound.setLooping(true);
}
OBD에서 들어오는 값에 따라 사운드를 나누어서 제어를 하고 있습니다.
처음에는 pause를 사용해서 조건 값에 따라 하나의 사운드가 start 하면 다른 하나는 pause를 하는 것을 하였는데
메모리 사용량을 보니 최대 19MB 까지 올라가는 것을 보고 메모리 부담을 줄이기 위해서
하나의 사운드가 start 하면 다른 하나는 stop을 한 후 release 후 null 값을 주는 것을 하는데
두 값이 한번씩 변화는 것은 됩니다. 하지만 하나의 사운드를 계속 유지 상태가 되지 않고 있습니다.
(위의 소스 에서 보면 900이 넘는 계속 값을 주었을 때 한번은 되지만 두번째에서 오류가 생깁니다.)
버튼을 이용한 것을 응용해서 해보았는데...오류가 생기네요 ㅜㅜ