1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

SoundPool spielt Ton zu oft überreinander ab

Dieses Thema im Forum "Android Spiele Entwicklung" wurde erstellt von soma-web, 22.07.2011.

  1. soma-web, 22.07.2011 #1
    soma-web

    soma-web Threadstarter App-Anbieter (kostenpfl.)

    Beiträge:
    146
    Erhaltene Danke:
    18
    Registriert seit:
    06.07.2011
    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
     
  2. computer_freak, 22.07.2011 #2
    computer_freak

    computer_freak Gewerbliches Mitglied

    Beiträge:
    156
    Erhaltene Danke:
    7
    Registriert seit:
    14.12.2010
    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.
     
  3. soma-web, 22.07.2011 #3
    soma-web

    soma-web Threadstarter App-Anbieter (kostenpfl.)

    Beiträge:
    146
    Erhaltene Danke:
    18
    Registriert seit:
    06.07.2011
    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;
       		}
               }
    };
    
     
  4. computer_freak, 22.07.2011 #4
    computer_freak

    computer_freak Gewerbliches Mitglied

    Beiträge:
    156
    Erhaltene Danke:
    7
    Registriert seit:
    14.12.2010
    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.
     
    soma-web bedankt sich.
  5. soma-web, 22.07.2011 #5
    soma-web

    soma-web Threadstarter App-Anbieter (kostenpfl.)

    Beiträge:
    146
    Erhaltene Danke:
    18
    Registriert seit:
    06.07.2011
    Aaah noch besser.
    Werd ich demnächst Umsetzen danke!
     

Diese Seite empfehlen