使用source / object / streamType获取音频幅度

时间:2017-07-18 06:51:26

标签: android audio-streaming android-video-player

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

我的应用中的示例我有一个videoPlayer(youtube)和videoCall功能。因此,当我收到videoCall时,当someOne在videoCall上讲话时,我需要减慢/停止videoPlayer的声音。有没有办法找到它?

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

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

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);
}

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

1 个答案:

答案 0 :(得分:0)

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

我找到的其他解决方案是使用MediaRecorder,它提供声音级别的不同来源,如MIC,VOICE_CALL等。但是因为SDK已经在内部使用MediaRecorder并且android不允许使用2同时MediaRecorder的实例所以它对我没用。

android: Detect sound level