2015-12-25 52 views
3

已經有such a question了,但似乎解決方法顯示根本不起作用。展示器的輸出仍受全局音量的影響,並且在音量完全降低但MediaPlayer仍在播放時由零組成。Android中的展示臺輸出取決於設備的音量

這裏是我的代碼重現此問題:

player=new MediaPlayer(); 
    player.setAudioSessionId(SHARED_SESSION_ID); 
    try { 
     player.setDataSource("https://example.com/song.mp3"); 
     player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mp.start(); 
      } 
     }); 
     player.prepareAsync(); 
    }catch(Exception x){ 
     Log.w(TAG, x); 
    } 

    equalizer=new Equalizer(0, SHARED_SESSION_ID); 
    equalizer.setEnabled(true); 

    visualizer=new Visualizer(SHARED_SESSION_ID); 
    int visualizerFftSize=Visualizer.getCaptureSizeRange()[1]; 
    visualizer.setCaptureSize(visualizerFftSize); 
    visualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() { 
     @Override 
     public void onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) { 
      int max=0, min=255; 
      for(int i=0;i<waveform.length;i++) { 
       int w=(int)waveform[i] & 0xFF; 
       max = Math.max(w, max); 
       min = Math.min(w, min); 
      } 
      Log.i(TAG, "wform "+max+"/"+min); 
     } 

     @Override 
     public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) { 
      int max=0; 
      for(int i=0;i<fft.length;i++) 
       max=Math.max((int)fft[i] & 0xFF, max); 
      Log.i(TAG, "fft max "+max); 
     } 
    }, Visualizer.getMaxCaptureRate()/2, true, true); 

    visualizer.setEnabled(true); 

奇怪的是,this example from ApiDemos作品就好了相同的設備(Nexus 5,系統的Nexus 4和Nexus 6P)上。我試圖儘可能地複製它。我還試圖在初始化Visualizer之前或之後初始化和/或啓用Equalizer,但這絕對沒有改變。

回答

0

我也遇到了同樣的問題,非常感謝您提供源代碼。只需要在您的活動代碼(例如onCreate)中設置以下代碼setVolumeControlStream (AudioManager. STREAM_MUSIC);,它適用於我。 希望能幫助你。

+0

我不再爲這個項目工作,但是IIRC至少在其中一個活動的某個地方存在這條確切的路線。 – Grishka

相關問題