metrasynth / radiant-voices

Work with SunVox file format tools (create, modify, read, write)
https://radiant-voices.rtfd.io/
Other
41 stars 3 forks source link

Is this project still live ? #13

Closed jhw closed 6 years ago

jhw commented 7 years ago

Hi, is this project still live ? Am interested in a) loading/parsing a .sunvox file into memory b) making some programmatic changes to the structure c) saving the results back to file in native .sunvox form. Is that possible ? (guessing so, looking for docs). Also is your .sunvox parser compete ? Any know bits missing ? Thanks in advance.

matthewryanscott commented 7 years ago

@jhw @zeffii Yes it is still alive, it is just in a dormant state for a few reasons, some due to my personal life, some technical.

It will probably get some attention from me once SunVox 1.9.3 is released (as I write this it's 75% to completion) in order to support new module and controller types.

One of the side-effects of Radiant Voices is the auto-generated module/controller reference that you can find in the Complete Guide to SunVox.

As far as your workflow, it is absolutely capable of doing what you describe. You can load sunvox or sunsynth files (or start from empty), use code to do about 98% of what you could do within SunVox itself, then write it out to a sunvox or sunsynth file. Or bypass the file system and load it directly into the SunVox DLL for playback. 😄

The parser I'd say is "about 98%" complete. There are a few controllers that change min/max behavior based on the value of another controller, such as LFO frequency. Radiant Voices doesn't yet fully support enforcing those limits.

I've done extensive tests to load as many sunvox files as I could find, then save them out again, then playback both the original and the processed version into a WAV file, and do a byte-by-byte comparison. I'm happy to say that it worked for every file I found (except for those that used generative/random stuff).

As far as the future of this project, some day I'd like to reimplement Radiant Voices in JavaScript (ES6/7). There are a few reasons for this:

I sent some tutorial stuff to someone via private message a few months ago. I'll copy it to some wiki pages and add links to them here.

matthewryanscott commented 7 years ago

"Hello world" tutorial now available at https://github.com/metrasynth/radiant-voices/wiki/Tutorial

jhw commented 7 years ago

There are lots of examples in the Sunvox distribution. Have you tested the parser against them ? What sort of successful coverage did you get ?

I'm vaguely interested in

Do u think the parser is up to doing something like this ? Rgds -

jhw commented 7 years ago

I meant ".. beats from another .."!

matthewryanscott commented 7 years ago

@jhw yes indeed... the corpus I used to test the Radiant Voices parser and writer included all projects in the SunVox distribution, plus as many others as I could find from other sources at the time, such as those posted on the VK SunVox group, and @zeffii's sunvox_tunes repo.

The Radiant Voices API is definitely capable of identifying and working with existing modules, module chains, and pattern data. It is also very capable of module construction. I have a few YouTube videos that show my "metamodule construction kit" project - drum sequence creator and random synth creator - that both create very complex module chains that would be time consuming to create by hand.

The easiest way for me to help you with your "SunVox remix" project would be for you to create a public Github repo for it, try to go as far as you can with what's available, and then ask specific questions about how to accomplish certain aspects. Then I could provide a pull request to your repo that would have my suggestions.

matthewryanscott commented 7 years ago

As far as successful coverage, I was striving for (and achieved) 100% success rate for all "deterministic" projects that I found... as in, projects that did not have any random/generative aspects.

This is because the testing script did a sample-by-sample comparison of WAV output (using SunVox DLL) from rendering the original project, to the WAV output after parsing the .sunvox file into RV and then writing it back out to a new file.

jhw commented 7 years ago

Yes it's me, sorry I mislaid your personal message somewhere. Still have ambitions to do something here if I can find some time. You have made great progress - in particular how did you manage to parse the different Sunvox values in the absence of documentation, particularly PDTA ? Personally would love a few more examples, that would make a big difference, in particular a) how to create a simple module chain from a blank template b) how to create a simple pattern with a single generator in a blank template (no timeline) and c) how to extract individual module chains and related patterns from an existing 'complex' Sunvox file. Keep up the good work, best wishes -

On 5 September 2017 at 20:07, Matthew R. Scott notifications@github.com wrote:

As far as successful coverage, I was striving for (and achieved) 100% success rate for all "deterministic" projects that I found... as in, projects that did not have any random/generative aspects.

This is because the testing script did a sample-by-sample comparison of WAV output (using SunVox DLL) from rendering the original project, to the WAV output after parsing the .sunvox file into RV and then writing it back out to a new file.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/metrasynth/radiant-voices/issues/13#issuecomment-327273002, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAilKsSsvQcX8Lg-saA5ZR7JvXo48nBks5sfZvYgaJpZM4O_vM_ .