【问题标题】:Visualizer output in Android depends on the device volumeAndroid 中的 Visualizer 输出取决于设备音量
【发布时间】:2016-09-27 23:13:45
【问题描述】:

已经有such a question,但似乎建议的解决方法根本不起作用。 Visualizer 的输出仍受全局音量的影响,并且当音量完全调低但 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);

奇怪的是,this example from ApiDemos 在相同的设备(Nexus 5、Nexus 4 和 Nexus 6P)上运行良好。我试图尽可能地复制它。我还尝试在初始化 Visualizer 之前或之后初始化和/或启用均衡器,但这完全没有改变。

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    我也遇到了同样的问题,谢谢你提供源代码。只需要在你的Activity代码中设置下面的代码setVolumeControlStream (AudioManager. STREAM_MUSIC);(比如onCreate)就可以了。 希望能帮到你。

    【讨论】:

    • 我不再从事那个项目,但 IIRC 至少在其中一项活动中的某处有这条确切的路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多