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

在我的应用程序示例中,我有一个 videoPlayer (youtube) 和 videoCall 功能。因此,当我收到 videoCall 时,当有人在 videoCall 上讲话时,我需要减慢/停止 videoPlayer 的声音。有什么办法可以找到吗?

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

只有当我在 Visualizer(audioSessionId) 中提供 AudioPlayer 的 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

关于android - 使用其源/对象/流类型获取音频的幅度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45159542/

10-16 02:16