From 2725b4c4798a95d34ecb7a33d7ee70d25370c1ee 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 --- .../media3/exoplayer/DefaultRenderersFactory.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java index b817109c2b..e78a2f1b03 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java @@ -484,6 +484,19 @@ public class DefaultRenderersFactory implements RenderersFactory { extensionRendererIndex--; } + try { + Class clazz = Class.forName("androidx.media3.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("androidx.media3.decoder.opus.LibopusAudioRenderer");