2016-12-14 2 views
0

Ich führe zwei Media Player gleichzeitig aus, um zwei verschiedene Sounds abzuspielen. Einer ist Audioaufnahme und der zweite ist Musik. Ich kontrolliere die Lautstärke von beiden durch zwei Suchleisten. Das Problem ist, dass die Lautstärke eines Mediaplayers gleichzeitig gesteuert wird. Wenn ein Medienplayer freigegeben wird, kann die Lautstärke eines anderen Medienplayers angepasst werden. Ich möchte SIMULTANE anpassen Hier ist meine Implementierung.Wie stelle ich die Lautstärke von zwei Media Playern gleichzeitig ein?

In Suchleisten verwende ich Audio-Manager, um die Lautstärke anzupassen. In der Musik seekbar wird Volumen durch, angepasst

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); // i = seekbar progress 

-Code für das Volumen der Aufnahme seekbar Veränderung ist,

audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, i, 0); // i = seekbar progress 

Antwort

0

Hier ist die Lösung 2 Media-Player gleichzeitig zu spielen und ihr Volumen durch seekbars zu steuern.

erstellen Variablen

MediaPlayer mpOne = null; 
MediaPlayer mpTwo = null; 
SeekBar seekBarOne, seekBarTwo; 

//Path to mp3 file stored in device 
String FILE_PATH_ONE = Environment.getExternalStorageDirectory().getPath() + "/music_one.mp3"; 
String FILE_PATH_TWO = Environment.getExternalStorageDirectory().getPath() + "/music_two.mp3"; 

Funktion zu initialisieren und Media-Player zu starten:

public void setMediaPlayers() { 
    mpOne = new MediaPlayer(); 
    mpTwo = new MediaPlayer(); 


    try { 
     mpOne.setDataSource(FILE_PATH_ONE); 
     mpTwo.setDataSource(FILE_PATH_TWO); 
     mpOne.prepare(); 
     mpTwo.prepare(); 
     mpOne.start(); 
     mpTwo.start(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

erstellen SeekBarChangeListener den aktuellen Fortschritt zu erhalten.

SeekBar.OnSeekBarChangeListener seekBarOneListener = new SeekBar.OnSeekBarChangeListener() { 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

     //Lets assume, seekbar's maximum progress is 10. 
     //i is the progress of seekbar between 0 to 10. 

     float volume = i * 0.10f; 

     //Set the volume if media player is not null 
     if (null != mpOne) 
      //volume is the float number between 0.0 and 1.0 
      mpOne.setVolume(volume, volume); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}; 

SeekBar.OnSeekBarChangeListener seekBarTwoListener = new SeekBar.OnSeekBarChangeListener() { 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

     //Lets assume, seekbar's maximum progress is 10. 
     //i is the progress of seekbar between 0 to 10. 

     float volume = i * 0.10f; 

     //Set the volume if media player is not null 
     if (null != mpTwo) 
      //volume is the float number between 0.0 and 1.0 
      mpTwo.setVolume(volume, volume); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}; 

In-Aktivität oder ein Fragment

seekBarOne = (SeekBar) v.findViewById(R.id.seekBar1); 
seekBarTwo = (SeekBar) v.findViewById(R.id.seekBar2); 

seekBarOne.setOnSeekBarChangeListener(seekBarOneListener); 
seekBarTwo.setOnSeekBarChangeListener(seekBarTwoListener); 

//Start media players 
setMediaPlayers(); 

//Completion listeners for releasing media players on completion. 
mpOne.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 

      mpOne.reset(); 
      mpOne.release(); 
      mpOne = null; 
     } 
    }); 
mpTwo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 

      mpTwo.reset(); 
      mpTwo.release(); 
      mpTwo = null; 
     } 
    }); 
Verwandte Themen