android - 如何在 exoplayer 中实现音频可视化工具

标签 android exoplayer exoplayer2.x visualizer

我正在开发一个广播应用程序。我在我的项目中使用 exoplayer 作为播放器,我想在我的playeractivity 上添加音频可视化工具。但我找不到任何教程或示例。我刚刚创建了一个 customerRenderfactory 并将其添加到我的播放器中。但我不知道我还应该做什么?有什么帮助或建议吗?我应该提到我的播放器现在工作得很好,我只需要找到一个解决方案来添加可视化工具。 RenderFactory类:

public class RenderFactory extends DefaultRenderersFactory {
private TeeAudioProcessor.AudioBufferSink listener;
private AudioProcessor[] aMProcessors;
private TeeAudioProcessor teeAudioProcessor;
private AudioRendererEventListener eventListener;

public RenderFactory(Context context, TeeAudioProcessor.AudioBufferSink myListener) {
    super(context);
    this.listener = myListener;
    teeAudioProcessor = new TeeAudioProcessor(this.listener);
}

@Override
protected void buildAudioRenderers(Context context, int extensionRendererMode, MediaCodecSelector mediaCodecSelector, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, boolean playClearSamplesWithoutKeys, boolean enableDecoderFallback, AudioProcessor[] audioProcessors, Handler eventHandler, AudioRendererEventListener eventListener, ArrayList<Renderer> out) {

    aMProcessors = new AudioProcessor[]{teeAudioProcessor};
    super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, enableDecoderFallback, aMProcessors, eventHandler, eventListener, out);
 }
}

在我的playerActivity中,我添加了这段代码并将renderfactory设置为我的播放器,但什么也没发生。

   RenderFactory renderFactory = new RenderFactory(this, new TeeAudioProcessor.AudioBufferSink() {
        @Override
        public void flush(int sampleRateHz, int channelCount, int encoding) {
            // what should I add here?
        }

        @Override
        public void handleBuffer(ByteBuffer buffer) {
            // what should I add here?
        }
    });

我尝试按照本教程进行操作,但没有成功。

tutorial

最佳答案

直接回答您的问题:

@Override
public void flush(int sampleRateHz, int channelCount, int encoding) {
     // you dont have to do anything here
}

@Override
public void handleBuffer(ByteBuffer buffer) {
    // This will give you the bytes from the sound that is going to be played
    // here you apply FFT so the audio move to the frequency domain instead of time based
}

您可以了解有关FFT的更多信息 here

FFT 是一种众所周知的算法,因此您可能会发现它在许多操作系统站点上实现。您可以使用这个library如果您愿意,但周围有独立的代码。

获得 FFT 数组后,您可以在 View 中绘制值。

您可以使用这个人的代码作为示例:https://github.com/dzolnai/ExoVisualizer

他还发表了一篇关于此问题的博客文章:https://www.egeniq.com/blog/alternative-android-visualizer

关于android - 如何在 exoplayer 中实现音频可视化工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63031132/

相关文章:

java - 如何更改状态栏字体颜色?

android - AAPT : error: attribute fastforward_increment (aka aplicationid. dev:fastforward_increment) 未找到

android - 在 RecyclerView 中释放 ExoPlayer

java - 更改 EditText 背景颜色并保留下划线

android - fragment View 异步更新 : ImageView not updating but other childs are getting updated in the view

android - Bitmovin 和 Exoplayer 依赖项冲突

android - ExoPlayer用来自特定站点的URL口吃

android - 在 ExoPlayer 中更改视频流的质量

android - 如何在 Exoplayer 2 中播放 .ts

android - 仅使用表单数据进行改造 2