Opened 6 months ago

#11017 new enhancement

Enhancing FFmpeg's playback support for MIDI files and other "instrument-free" music formats

Reported by: peteroupc Owned by:
Priority: normal Component: ffmpeg
Version: unspecified Keywords:
Cc: peteroupc Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

The following is a request to enhance FFmpeg's support for playing MIDI files (.mid).

Currently, FFmpeg relies on libmodplug to synthesize MIDI, MOD, and other music formats to audio. However, libmodplug appears not to be actively developed; the last commit at the time of writing was made in January 30, 2022, so more than two years ago. Since future development on libmodplug is not forthcoming, and I don't know FFmpeg's plans to adopt a replacement for that library, I file this enhancement request.

The following are features I would like FFmpeg to support, to the extent that it's not already supported:

  • Support for software synthesis of MIDI files using other instrument source formats besides Timidity's patch format (e.g., downloadable sounds [DLS]; SoundFont2 .sf2; OPL2, OPL3, and other FM instrument banks). In this sense, the source code in the projects fluidsynth, libADLMIDI, libOPNMIDI, and OPL3BankEditor may be useful here. Moreover, Timidity's patch format appears to support SoundFont 2 already, but it's cumbersome in libmodplug to specify a directory containing timidity.cfg as opposed to specifying the SoundFont file (.sf2) directly.
  • Seeking of MIDI files such that a pause and resume function can be offered by a media player.
  • Support for popular looping conventions seen in MIDI files.

This request also applies to .abc and other "instrument-free" music formats as it does to MIDI files.

Just as an aside, a public-domain music synthesis library and instrument banks (https://peteroupc.github.io/music.html) would greatly help improve MIDI playback support across the open-source ecosystem; however, I don't insist on that for purposes of this issue.

Change History (0)

Note: See TracTickets for help on using tickets.