使用 source/object/streamType 获取音频的振幅

Get amplitude of audio with its source/object/streamType

任何人都可以帮我找到任何方法来找到应用程序中不同音频播放器的振幅吗?我需要知道我的应用程序中 videoCall 音频的振幅。

在我的应用程序示例中,我有一个 videoPlayer (youtube) 和 videoCall 功能。因此,当我收到 videoCall 时,我需要 slow/stop 当 someOne 在 vi​​deoCall 上讲话时播放 videoPlayer 的声音。有什么办法可以找到吗?

我找到了一种方法来获取 phone 的音频播放器的振幅,但这提供了在应用程序中播放的所有类型音频的振幅,而无需发送任何源标识符或流类型(​​MUSIC_STREAMCALL_STREAM) 或任何不同的东西,我可以使用它来识别给定幅度的来源,比如播放器或视频呼叫。

只有当我在 Visualizer 中提供 AudioPlayer 的 audioSessionId (audioSessionId) 时,这才会有帮助,但由于 ThirdPartySDK,我无法获得任何播放器(videoCall、youtube)的 audioSessionId。

private void createVisualizer(){
    int rate = Visualizer.getMaxCaptureRate();
    Visualizer audioOutput = new Visualizer(0); //  get output audio stream
    audioOutput.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
        @Override
        public void onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) {
            float intensity = ((float) waveform[0] + 128f) / 256;
            Log.d("visualizer = ", "visualizer = "+visualizer+ "visualizer = "+String.valueOf(intensity));
        }

        @Override
        public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) {

        }
    },rate , true, false); // waveform not freq data
    Log.d("rate", String.valueOf(Visualizer.getMaxCaptureRate()));
    audioOutput.setEnabled(true);
}

任何建议都会有所帮助,在此先感谢。

我找到了解决方案,我用于 VideoCall 的 SDK 提供了所有用户的语音级别,所以我用它来实现我的功能。

我发现的其他解决方案是使用 MediaRecorder,它提供不同来源的声音级别,例如 - MIC、VOICE_CALL 等。但是由于 SDK 已经在内部使用 MediaRecorder 而 android 没有允许同时使用 2 个 MediaRecorder 实例所以它对我不起作用。

android: Detect sound level