From 0948fd1cd8cecf9074e105d6688ca702e6a5825e Mon Sep 17 00:00:00 2001 From: hmzh Date: Thu, 12 May 2022 12:19:08 +0100 Subject: [PATCH] Adds key functionality for basic MIDI synthesization - Add a MidiRenderer skeleton with basic playback - Add MidiDecoder with placeholder synthesizer (JSyn) impl - Make MidiExtractor feed placeholder data - Add Renderer extension loaders for MIDI PiperOrigin-RevId: 448212797 --- .../android/exoplayer2/DefaultRenderersFactory.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java index 467db322aa..3ce166b1fa 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java @@ -483,6 +483,19 @@ public class DefaultRenderersFactory implements RenderersFactory { extensionRendererIndex--; } + try { + Class clazz = Class.forName("com.google.android.exoplayer2.decoder.midi.MidiRenderer"); + Constructor constructor = clazz.getConstructor(); + Renderer renderer = (Renderer) constructor.newInstance(); + out.add(extensionRendererIndex++, renderer); + Log.i(TAG, "Loaded MidiRenderer."); + } catch (ClassNotFoundException e) { + // Expected if the app was built without the extension. + } catch (Exception e) { + // The extension is present, but instantiation failed. + throw new RuntimeException("Error instantiating MIDI extension", e); + } + try { // Full class names used for constructor args so the LINT rule triggers if any of them move. Class clazz = Class.forName("com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer");