Android中的可视化工具输出取决于设备音量

Android中的可视化工具输出取决于设备音量,android,android-mediaplayer,Android,Android Mediaplayer,已经有了,但似乎解决方案表明根本没有效果。可视化工具的输出仍受全局音量的影响,当音量一直调低但MediaPlayer仍在播放时,输出由零组成 以下是我重现此问题的代码: player=new MediaPlayer(); player.setAudioSessionId(SHARED_SESSION_ID); try { player.setDataSource("https://example.com/song.mp3"); player

已经有了,但似乎解决方案表明根本没有效果。可视化工具的输出仍受全局音量的影响,当音量一直调低但MediaPlayer仍在播放时,输出由零组成

以下是我重现此问题的代码:

    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);
player=newmediaplayer();
player.setAudioSessionId(共享会话ID);
试一试{
player.setDataSource(“https://example.com/song.mp3");
player.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
mp.start();
}
});
player.prepareAsync();
}捕获(异常x){
Log.w(标签x);
}
均衡器=新均衡器(0,共享会话ID);
均衡器。设置启用(真);
可视化工具=新的可视化工具(共享会话ID);
int VisualizerFtsize=Visualizer.getCaptureSizeRange()[1];
visualizer.setCaptureSize(VisualizerFtsize);
visualizer.setDataCaptureListener(新的visualizer.OnDataCaptureListener(){
@凌驾
public void onWaveFormDataCapture(可视化工具可视化工具,字节[]波形,整数采样){
int max=0,min=255;

对于(int i=0;i我也遇到了同样的问题,感谢您提供源代码。只需在您的活动代码(例如在
onCreate
)中设置以下代码
setVolumeControlStream(AudioManager.STREAM_MUSIC);
,它对我有效。
希望可以帮助你。

我不再从事那个项目,但IIRC至少在其中一项活动的某个地方有这条确切的路线。