SoundPool spielt Ton zu oft überreinander ab

S

soma-web

App-Anbieter (kostenpfl.)
19
Hi AH Community,
ich hab ein Problem mit dem Soundpool, ich will einen Ton abspielen sobald der Wert des Lichtsensors unter einen bestimmten Wert fällt. Das Problem dabei ist, dass der Wert sehr oft schwankt und somit der Ton öfters übereinander abgespielt wird.

Code:
SensorEventListener lightSensorEventListener
    = new SensorEventListener(){
..
public void onSensorChanged(SensorEvent arg0) {
..
 if(start == true){
		   if(arg0.values[0] < Threshold){
			    float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
	   			float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
	   			float volume = actualVolume / maxVolume;
	   			// Is the sound loaded already?
	   			if (loaded) {
	   				soundPool.play(soundID, volume, volume, 1, 0, 1f);
	   				Log.e("Test", "Played sound");
	   			}
	   		}
	   }else{
		   
	   }
	   
   }};

Wie gesagt das Problem ist, dass er beim schnellen Schwanken des Sensorwertes den Sound übereinander abspielt. Das ist aber unschön.
Kann ich beim SoundPool irgendwie abfragen, ob zur zeit etwas gespielt wird und darauf reagieren? Oder sollte man das irgdendwie anders lösen?

Danke euch!

Gruß Soma
 
Wenn der Sound gestartet wird, merkst du dir die aktuelle Zeit.
Wird der Sound erneut versucht zu starten, testest du ob die Laenge des Sounds vergangen ist, seit der sound das letzte mal gestartet hat.

Vorraussetzung hierfuer ist, dass du die Laenge des Soundes hast.
 
Danke, aber hab es jetzt mit nem MediaPlayer gelöst:

Code:
boolean completed = true;
MediaPlayer mMediaPlayer;

 @Override
   public void onCreate(Bundle savedInstanceState) {
...
//MEDIAPLAYER
		mMediaPlayer = MediaPlayer.create(this, R.raw.alarm_1);
		mMediaPlayer.setLooping(false);
		mMediaPlayer.setOnCompletionListener(complete);
}
//Listener wenn Song vorbei ;)
private OnCompletionListener complete = new OnCompletionListener(){
	   public void onCompletion(MediaPlayer arg0){
		   completed =  true;
	   }
   };
//z.b. beim Button event
private OnClickListener btListener = new OnClickListener()
   {
   	public void onClick(View v){   	
   		
   		if(completed){   		
   		mMediaPlayer.start();
   		completed = false;
   		}
           }
};
 
Jop, hier hast du zur erleichterung den onCompletionListener.
Du brauchst uebrigens keine variable "completed",
der MediaPlayer kommt bereits mit einer Methode "isPlaying()", die du einsetzen kannst.
 
  • Danke
Reaktionen: soma-web
Aaah noch besser.
Werd ich demnächst Umsetzen danke!
 

Ähnliche Themen

E
Antworten
1
Aufrufe
2.258
markus.tullius
markus.tullius
A
  • Android_DEV
Antworten
2
Aufrufe
868
Android_DEV
A
A
  • Android_DEV
Antworten
4
Aufrufe
1.438
Android_DEV
A
Zurück
Oben Unten