2011-01-01 29 views

Trả lời

45

Mã này làm việc cho tôi,

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); 
mp.start(); 

cho Mute

mp.setVolume(0,0); 

& Unmute hoặc đầy đủ khối lượng

mp.setVolume(1,1); 
+3

hai chữ số có nghĩa là kênh L và R, do đó, chữ số phải là mp.setvolume (1,1); –

+0

@DheeB cảm ơn, tôi đã cập nhật câu trả lời của mình –

+0

Tôi biết đây là một thời gian dài sau, nhưng tôi nhận được một ngoại lệ con trỏ null khi tôi cố gắng thiết lập âm lượng. Tôi thực sự cảm kích sự giúp đỡ của bạn. –

8

Bạn có thể muốn làm mờ/thay đổi âm thanh thay vì đặt ngay lập tức thành âm lượng đầy đủ (1,0f) hoặc không (0,0f).

Đó là một chút khó khăn, bởi vì bạn cần một công việc async để giữ ứng dụng của bạn đáp ứng:

mpMain là dụ MediaPlayer của tôi để chơi nhạc nền lặp. Tôi cũng quan tâm đến nó trong OnPause() và OnResume().

Phương thức playBackgroundMusic được sử dụng để bật nhạc, fadeOutBackgroundMusic tắt nhạc, nhưng bằng cách giảm âm lượng trong 0,5 giây (10 * 50, xem trong khi và Thread.sleep).

Khối lượng cơ sở của tôi là 0,8f, bạn có thể muốn đặt thông số đó thành tác vụ không đồng bộ hoặc sử dụng biến toàn cầu tĩnh.

public void playBackgroundMusic(Boolean isOn){ 
    if(isOn){ 
    // prevent conflics with async fade-out task 
    if(mtask_fadeout_music!=null){ 
     mtask_fadeout_music.cancel(true); 
     mtask_fadeout_music=null; 
    } 
    if(mpMain==null){ 
     mpMain = MediaPlayer.create(this, R.raw.zin___piano_2_140bpm_32158); 
     mpMain.setLooping(true); 
     mpMain.setVolume(0.8f,0.8f); 
     mpMain.start();       
    } 
    } 
    else{ 
    if(mtask_fadeout_music==null){ 
     fadeOutBackgroundMusic(); 
    } 
    } 
} 

public void fadeOutBackgroundMusic(){ 
    mtask_fadeout_music = (FadeOutMusic)new FadeOutMusic().execute(); 
} 


// 
// background processing ... fade out music stream 
// 
public class FadeOutMusic extends AsyncTask<String,Integer,String> { 

    @Override 
    protected String doInBackground(String... args) { 
    float level = 0.8f; 
    int i = 1; 

    while(i<50){ 
     i++; 
     if(mpMain != null){ 
      level=level*0.9f; 
      mpMain.setVolume(level, level);   
     } 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
    return "dummy"; 
    } 

    @Override 
    protected void onPostExecute(String dummy) { 
    if(mpMain != null){ 
     mpMain.setVolume(0,0);   
     mpMain.release(); 
     mpMain = null; 
    } 
    if(mtask_fadeout_music!=null){ 
     mtask_fadeout_music = null; 
    } 
    }  

    @Override 
    public void onCancelled() { 
    if(mpMain != null){ 
     mpMain.setVolume(0,0);   
     mpMain.release(); 
     mpMain = null; 
    } 
    if(mtask_fadeout_music!=null){ 
     mtask_fadeout_music = null; 
    } 
    } 
} 
12
AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 

    int current_volume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
    //If you want to player is mute ,then set_volume variable is zero.Otherwise you may supply some value. 
    int set_volume=0; 
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,set_volume, 0); 
1

Hãy thử này ...

AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
manager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

Nó sẽ tắt Toàn bộ khối lượng phương tiện truyền thông để tắt

0

AudioManger.setStreamMute không được dùng nữa. sử dụng mã thay thế bên dưới.

// Change the stream to your stream of choice. 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
     am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0); 
    } else { 
     am.setStreamMute(AudioManager.STREAM_MUSIC, true); 
    } 
Các vấn đề liên quan