BastyCDGS / ffmpeg-soc

FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library.
http://www.ffmpeg.org
Other
2 stars 1 forks source link

status update? will this go upstream? #1

Open coderofsalvation opened 2 years ago

coderofsalvation commented 2 years ago

very interesting project. Btw will this play XM too?

BastyCDGS commented 2 years ago

Hi!

Yes, I want to go this to go upstream.

Unfortunately, there is still a lot to do and I don't have much time, because of work, so it is stalled in the moment. The current engine has full support for MODs, S3Ms, XMs, ITs, FC13/14 and MEDs (except MIDI).

On Amiga, where this project originally started, I have done loaders in 68k assembly language for the formats mentioned above. I just have to convert them to C and apply the changes for FFmpeg. In fact, all test data is based on the above formats.

I really hope that I find more time in order to continue this project.

Best regards, Basty!

coderofsalvation commented 2 years ago

Right, time is always our enemy :)

The current engine has full support for MODs, S3Ms, XMs, ITs, FC13/14 and MEDs (except MIDI).

oh that is quite impressive! I guess midi is somewhat of a second citizen, as it requires setting up a soundfonts (eventhough I noticed this fluidsynth patch) Looking back, I still don't understand why SF2 was invented when they could've just included a score in it (like .XM / .IT etc). It's so beautiful that modules just playback perfectly fine, by just loading up one file :)

I don't know what the status is so far, but besides conversion, another interesting application would be all the audiovisualizers shipped with default ffmpeg to generate highres youtube/whatever-videos out of modules.

Crazy idea: libavsequencer could output multichannel audio, then you could easily generate videos with vu-meters per channel whatnot etc. One could even mix modules if they would have the same BPM with ffmpeg time-functionality (-complex_filter ....) on the commandline.

What was your initial goal for libavsequencer?

BastyCDGS commented 2 years ago

My current TODO list is as follows (not necessary in the order listed):

  1. Implement stack and memory access support for synth assembler (and extending from 16-bit to either 32-/64-bits).
  2. Allow any sample format FFmpeg allow as channel-input, not just 1-32 bits PCM.
  3. 16-bit volume and panning for internal mixing (currently 8-bit).
  4. MIDI implementation
  5. Nice integration with mixer options, etc. in FFmpeg (esp. ffplay), currently only passable via source code edit
  6. More advanced interpolation abilities for the mixers
  7. Streaming modules over network, allow them also as audio data for videos.

The initial goal of the original project called TuComposer (The united Composer) was planned to be a platform-independent tracker coming as a shared library, which allows people to write any tracker GUI with ease (no hassling with tracker internals) and without to care about issues like playback compatibility.

A huge problem (esp. back in the past) was, while there was documentation for the tracker formats themselves, many of them had no free source code coming with them. Also documentation was never enough for really accurate playback. Most of the work was therefore needed to figure all those corner cases where many players output sound different compared to the original tracker.

So TuComposer was born, initially being 100% m68k assembly code, I started porting them to StormC on Amiga, since I wanted it for other platforms as well. That StormC source code was then ported to FFmpeg and libavsequencer was born.

So the key goals are:

  1. Platform independence and open source.
  2. Good documentation and structure
  3. Feature-rich, easy to add new features without breaking everything