Giter Club home page Giter Club logo

Comments (5)

zxol avatar zxol commented on September 24, 2024

Thanks for the message, understood about the updates. I'll have a look at it and make the changes.

Unfortunately I don't have the expansion so it'll be difficult to include an option for it, but I'll have a look at that too.

Regarding the resolution, you're right that it's double for omnisphere. I'm not sure if the file format for serum wave files can be altered to read tables of that size, but I could be wrong about this, so I'll have to do some testing. There's been some talk on KVR about making a standard file format for wavetables but to my knowledge there isn't one yet, unfortunately, so 2048 has become a kind of defacto standard.

Due to the band limiting antialiasing of synths like serum and vital, it's unlikely you'll notice a difference in sound quality unless you're playing notes at the extreme low registers or doing some osc as LFO tricks (phaseplant ftw!)

from omniserum.

lfo8 avatar lfo8 commented on September 24, 2024

Thanks for replying so quickly!

I wish I could just share the .db with you, but that would probably be violating some rules, etc. It's pretty small (287mb) compared to the original factory .db (1.35gb) and .db2 (635mb).

Hmm, I think I can help you troubleshoot what I'm seeing though. I looked at the wavetables closely as they appear in Omnisphere, and compared the file structure to what the repo is rendering. Here is Omnisphere's wavetable directory compared to how the repo is rendering the actual audio files into folders.

In Omnishere, the factory wavetable directory shows as this:

1 - Classic Waveforms > [Subtype Names] > [Wavetable Names]
2 - Analog Timbres > [Subtype Names] > [Wavetable Names]
3 - Digital Wavetables > [Subtype Names] > [Wavetable Names]
Sonic Extensions > Seismic Shock > [Wavetable Names]

The Seismic Shock Wavetable Names are as follows:

Seismic Bass Agitator
Seismic Bass Armageddon
Seismic Bass B-52
Seismic Bass Binny
Seismic Bass Compactor
Seismic Bass Creature
Seismic Bass Cybotron
Seismic Bass De-Bassed
Seismic Bass Dumptruck
Seismic Bass Fatality
Seismic Bass Flattener
Seismic Bass Morphoid
Seismic Bass Ooze
Seismic Bass Orson
Seismic Bass Overload
Seismic Bass Sublordz
Seismic Bass Wooktacular
Seismic Lead Afterburner
Seismic Lead Catastrophe
Seismic Lead Epicalness
Seismic Lead Ginzu
Seismic Lead Mindray
Seismic Lead Railbag
Seismic Lead Ravemaster
Seismic Lead Shreddy
Seismic Lead Strafer
Seismic Lead Strangulate
Seismic Lead Weaponized
Seismic Raw Shapes

Now instead of those being generated as .wav files, they're made into folders. And each of those folders contains only folders instead of .wavs. Here's an example of the file structure rendered by the repo:

omnisphere > Seismic Bass B-52 > (and then these 5 folders...)
archiveMetadata.wfbarmd
SmcWt24_00.stmwf
SmcWt24_04.stmwf
SmcWt24_17.stmwf
SmcWt24_18.stmwf

Some of the created wavetable-named folders have many more folders. And two of the folders have a slightly different thing happening. One of the folders has "SmcWtxx_xx.stmwf" folders with different numbers between "Wt" & "_" as if the wavetable is made from different files or something. I'm not sure what's happening there. Let me just show you. Example:

omnisphere > Seismic Bass Agitator >
archiveMetadata.wfbarmd
SmcWt01_00.stmwf
SmcWt01_05.stmwf
SmcWt01_06.stmwf
SmcWt01_07.stmwf
SmcWt01_08.stmwf
SmcWt01_10.stmwf
SmcWt01_14.stmwf
SmcWt01_15.stmwf
SmcWt01_16.stmwf
SmcWt02_09.stmwf
SmcWt02_12.stmwf
SmcWt02_03.stmwf
SmcWt02_07.stmwf
SmcWt02_20.stmwf
SmcWt03_12.stmwf

And here's the last wavetable folder which seems to combine several different shapes into the 1 Seismic Raw Shapes wavetable in Omnisphere:

omnisphere > Seismic Raw Shapes > (and then these 9 folders...)
archiveMetadata.wfbarmd
SmcWt21_11.stmwf
SmcWtModSaw1.stmwf
SmcWtModSaw2.stmwf
SmcWtModSin02.stmwf
SmcWtModSin03.stmwf
SmcWtModSin04.stmwf
SmcWtModSqr0.stmwf
SmcWtModSqr1.stmwf

All of the rest have consistent numbering between "Wt" & "_" like the Bass B-52 folder, so it's just Bass Agitator and Raw Shapes that look a little different.

I hope that's helpful. Let me know if I can try to show you any other info.

Oh, one more question... since the original "BundleArchives.db" file is about 1.35gb, do you know why the rendered contents of the "omnisphere" folder are only about 12mb? That is what prompted my inquiry about maybe rendering at 4096. I was wondering if the repo was significantly reducing the quality or amount of frames in the rendered .wav files. They seem to sound pretty solid in Serum & Vital, but I can't help but wonder why the size difference is so massive. The .wavs are so tiny, and some seem to only have like 5 or 6 sound frames.

(And Phaseplant, yesss! I haven't spent much time with it yet aside from trying a demo, but it seems like such a beast!)

from omniserum.

zxol avatar zxol commented on September 24, 2024

So, omnisphere is not just a wavetable synth, it's also a rompler, like a multi sample kontakt patch. The db files are 99% those samples.

Interestingly, wavetable synths are very similar to romplers, as they both use this "map samples to ranges of the keyboard" approach.

When serum loads a wavetable up, it creates a bunch of different copies of the wavetable at different resolutions, and maps them across zones of the midi keyboard. (Each octave is double the frequency, which equates to halving the sample count)

Omnisphere, on the other hand, precomputes (or in the case of sampling a real synth, records the synth at higher pitches) , these different resolution copies and includes them in the wavetable file, making them much larger file sizes, but allowing them to skip the step of computing anti-aliased copies on load, and preserves any non linearity in the sampled synth's oscillators. You can think of this non linearity as an analog synth's oscillator waveform subtly changing shape as you raise and lower the pitch. When i convert the wavetables to serum's format, this extra information is lost.

Omnisphere does other tricks too, like combining it's different wavetables to create combinations. Those are much more difficult to convert to a serum format.

Essentially, omnisphere's wavetables are a kind of 3D wavetable, where one axis is a single waveform, another axis is the wavetable position, and a third axis is used for things like mixing other wavetables or replicating an analog synth's nonlinearities.

I've messed around with creating 3D wavetables and quickly discovered why it's not already a common practice. File size and memory usage! A 2D wavetable with a resolution of 2048 samples and 256 frames is 524288 samples a couple MB. A 3D wavetable with 2048 x 256 x 256 is 134217728 samples. That's around half a gb per wavetable.

There is a way around this though, which is to leverage the same techniques video file compression uses (videos are analogous to 3D wavetables). Interesting stuff.

from omniserum.

lfo8 avatar lfo8 commented on September 24, 2024

Thank you for the detailed explanation. You just made me respect Omnisphere even more, and I have a better understanding of the "3D" aspect of Ominsphere's wavetables. I've always been curious about how wavetable synths render a wavetable across the keyboard/octave range, particular when it comes to replicating classic synths. I've imagined that if you were to take some classic waveform sampled at a higher octave and use it as a wavetable for a lower octave bass sound, it may not sound as close to 100% authentic as if you were to use a waveform sampled at a lower octave range closer to what you intend to play it in. It sounds like Omnisphere has addressed this in how you explained the way it uses different resolution copies of the sound across the keyboard to reproduce non linearites. Very interesting stuff, indeed.

I guess now I'm wondering if there's any more that could be done to extract more of the awesomeness from Omnisphere's wavetables to use with other synths. I guess at the very least, it could be neat to pull 2048 resolution renders at 256 frames to really pull out as much as possible. There are a few of Ominsphere's wavetables I'm loving using in Serum/Vital, and in various modes, those synths do a great job at filling in the spaces. But it could be neat to get "more" of the original frames from Ominsphere. If you're able to provide an updated "go.js" (or tell me which bit of code to change), I'd love to try seeing what else could be squeezed out of the original .db & db2 files.

Based on what you've helped me understand, it seems like maybe getting more of the original frames may be more useful for using in other synths that use a standard resolution of 2048. But I'm still curious about your ideas for pulling full 3D wavetables. If you end up making that happen, that could be useful, probably down the road a bit. I'd guess within the next few years or so we could see more synths pushing wavetable synthesis even further (Serum 2? Something else?), possibly running with 4096 resolution 3D wavetables as standard, and when that happens, the then "classic" Omnisphere 3D wavetables could be fun to have on hand to use in that synth.

And while it may be too difficult to pull tables that are combined like those 2 anomalies in Seismic Shock and maybe others I'm unaware of, it could be neat to export the individual components separately if that's all that could be done. But maybe you're aware of how to account for some of those aspects. That reminds me – what's neat is that in .db2, there's a new folder added under "1 - Classic Waveforms" called "X-fade Shapes". The wavetables each end with a number ranging from 2X to 6X. Your repo rendered them all with a corresponding number of frames to capture each shape! Maybe that was a happy accident, but it does seem to make them all usable in a comparable way to how they function in Omnisphere. If you haven't ran your repo on .db2, I'd highly recommend doing so!

In the meantime if you're able to find time and have interest to do anything else with this project, please do! I'd love to try exporting larger files (more frames up to 256, maybe 4096 but that doesn't seem like a necessity at the moment), and I'd love to export the Seismic Shock wavetables, too. (Luckily, the other Sonic Extensions don't have new wavetable .db files to worry about.) And thanks again for this project. I hope more people get to try it.

from omniserum.

lfo8 avatar lfo8 commented on September 24, 2024

Hello, I wanted to let you know that I successfully exported all the Seismic Shock wavetables. All that was needed was to change the .db's internal folder structure (by adding a few folders!) to be he same as the main db file. So that's an easy workaround anyone can do with a hex editor.

The one last thing I'd love to do is extract the .wav files from soundsource .db files to use as wavetables, but since the file types in the soundsource .db files are different, I can't just pull them by changing the file structure with your script. But since there are actual .wav files in the soundsource .dbs I looked at, it might be even easier to write a script to scan for .wavs and export them. But I've reached the limits of what I can achieve with workarounds and my lack of js knowledge, so I'll leave that as my last request: extracting the .wavs from soundsource .db files would be great! In the meantime, the full set of wavetables I've pulled from Omnisphere and Seismic Shock sound great in Vital and Serum, so I'll keep enjoying those for now!

from omniserum.

Related Issues (1)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.