2015-12-25 1 views
3

Уже было such a question, но похоже, что обходной путь, предложенный там, не работает вообще. Вывод Visualizer по-прежнему зависит от глобального тома и состоит из нулей, когда громкость полностью отключена, но 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, но это абсолютно ничего не изменило.

ответ

0

Я также столкнулся с той же проблемой, спасибо за предоставленный исходный код. Просто введите код setVolumeControlStream (AudioManager. STREAM_MUSIC); в свой код операции (например, onCreate), и он работает для меня. Надежда может вам помочь.

+0

Я больше не работаю над этим проектом, но IIRC там была эта точная линия где-то по крайней мере в одном из видов деятельности. – Grishka