簡體   English   中英

如何將音頻可視化器實現到 exoplayer

[英]how to implement audio visualizer to exoplayer

我正在開發一個廣播應用程序。 我在我的項目中使用 exoplayer 作為播放器,我想在我的 playeractivity 中添加音頻可視化器。 但我找不到任何教程或示例。 我剛剛制作了一個customeRenderfactory 並將其添加到我的播放器中。 但我不知道我應該怎么做更多? 任何幫助或建議? 我應該提到我的播放器現在工作正常,我只需要找到一個解決方案來添加可視化器。 渲染工廠 class:

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

我嘗試按照本教程進行操作,但沒有成功。

教程

直接回答你的問題:

@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 的更多信息

FFT 是一種眾所周知的算法,因此您可能會發現它在許多操作系統站點上實現。 如果你願意,你可以使用這個,但是周圍有獨立的代碼。

一旦有了 FFT 數組,就可以在視圖中繪制值。

你可以以這人的代碼為例: https://github.com/dzolnai/ExoVisualizer

他還發表了一篇博文: https://www.egeniq.com/blog/alternative-android-visualizer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM