FM Composer, a tracker with integrated FM synthesizer

Started by phanoo, February 19, 2018, 22:23:39

Previous topic - Next topic

phanoo

Hi there

I just wanted to share with you my new software. I'm a big fan of OpenMPT, I use it since 10+ years when it was still called Modplug Tracker... so yeah, I'm very familiar with trackers :)
As a developer, I always wanted to create my own. I though it would be fun not to use samples, but FM synthesis instead. I like the way it sounds when well programmed, and I find FM more inspiring than plain samples. If you don't know what FM is, it's Frequency Modulation, a way to generate sounds, like the Sega Genesis did, and some Yamaha synths from the 80's (which had a lot of influence over the 80's music). Now it's used mostly for electro stuff.

Anyway, I started to build this software in C and C++, and after a lot of work I'm proud to release this first version, the "finished product" :) It's got a 6-operator FM engine with 24 voice polyphony, a user-friendly GUI for creating sounds, and more.
It's open-source and free, so if you'd like to give it a try.. I'd be really pleased :)

Check this little tune made with it : https://www.youtube.com/watch?v=bT__3KI3Lt4

Download page : http://fmcomposer.org/en/download.php

I'd be infinitely grateful if my software find some users :) Any feedback appreciated !

Some screenshots :




Saga Musix

Nice work! The program seems lightweight and very responsive, although it's sitting here constantly consuming around 15% CPU (on a dual-core system) even when doing absolutely nothing, occasionally even going up to a whole core for no good reason.
Some minor things in the GUI seem distracting to me: The use of a proportional font for pattern data just feels wrong, especially when the octave alignment is inconsistent between e.g. C 5 and C#5. The other thing is that the row highlights do not seem to be consistent with the rows per beat setting, as it seems like every 4th row is always highlighted. However, if the row highlight was dynamic, then the lack of distinction between non-highlighted rows would also be confusing (try telling e.g. 7 empty rows apart from each other).
Being able to import classic AdLib formats would be a big plus, although I'm not sure how easily their 4-op instruments would map to a 6-op implementation.

And last but not least... ;)
Quoteand I find FM more inspiring than plain samples
I find FM complements really well with sampled drums. Most FM drums are simply very dull-sounding, and I'm afraid the YouTube demo video is a perfect example for that. ;) The golden era of FM soundtracks were certainly games like Zone 66 that mixed FM with samples.

Good luck with the project! If you need any more inspiration for new features: Add a chorus effect. FM *always* sounds better with chorus. ;)
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

phanoo

#2
Thank you very much for your advices !

For the CPU usage, it's probably the famous nVidia bug with old-style OpenGL apps, it has never been corrected... Try setting the 'Threaded optimization' parameter to Disabled in nVidia control panel, CPU should be fine after that (about 1% on my computer during playback)

The row highlight is editable in the Settings page. I thought about sync'ing it to the row per beat settings, but I faced some design problems, how should I handle this if the song uses different time signatures in several places ? I thought about adding an effect which only purpose would be to tell the tracker what the composer is doing (telling the time signature or the key), it would also allow the tracker to display flats instead of sharps when needed.

You're right about the FM + sampled drums, remembering of the Sonic soundtracks on Genesis, that sounded very good that way ! Maybe in a next version, although it requires a lot of development to provide basic sample editing features :)

Saga Musix

Quote from: phanoo on February 20, 2018, 09:11:25
For the CPU usage, it's probably the famous nVidia bug with old-style OpenGL apps, it has never been corrected... Try setting the 'Threaded optimization' parameter to Disabled in nVidia control panel, CPU should be fine after that (about 1% on my computer during playback)
I don't think that's going to work, as it's AMD graphics. ;)

Quote from: phanoo on February 20, 2018, 09:11:25The row highlight is editable in the Settings page. I thought about sync'ing it to the row per beat settings, but I faced some design problems, how should I handle this if the song uses different time signatures in several places ?
I think the row highlight should always be consistent with the time signature (so if it changes, the row highlight also has to change). Otherwise I think it's not of much use.
In OpenMPT, there is only one time signature per pattern so it's easily solvable, but if you can change the time signature in the middle of a pattern it might get more complicated - and at the same time a consistent row highlight will become much more helpful for the user, because they instantly see where the changes are.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

phanoo

#4
Can you tell me which graphics card and CPU you have ?

My tests reported the following:

~1% cpu on i7-4790k (Win10)
~5% cpu on i5 laptop (Win10)
~15% on atom netbook (Win8)
~50% on pentium3 933mhz (WinXP)

I think the audio engine is pretty well optimized, but the GUI isn't, because SFML (the lib I use) uses OpenGL in immediate mode, which has some overhead when drawing lots of elements. If you want to help tell me, I could send you a Debug build so you can run Very Sleepy on it and see where your CPU spends its cycles.

Saga Musix

CPU is a Core2 Duo T9400 and graphics card is a FireGL V5700 (equivalent to Radeon HD 3650). Quite dated but still a simple GUI should not produce that much of CPU overhead even on that configuration. I don't think you need to send me a debug build; just the corresponding PDB file for the Release EXE is enough.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

phanoo

OK i'll send you the files this evening ;)
Does the CPU usage depends on the page displayed ? You can try a simple page (e.g. the General tab) vs the Pattern view fully zoomed out or the Instrument view which has lots of elements. And check the delta % between idle and playing with most channels active

Saga Musix

In the general tab it's about 5%, while on the instrument tab it's closer to 20%. Playing a song only adds a few more percent to that.
By the way, "save and quit" does not work if the song has not been saved yet. It should present a save dialog, instead an error message is shown.
I think adding tooltips for icons and abbreviated button labels (such as the M/S/R) buttons will be helpful to people who are not familiar with the program yet.
In addition to being able to select the operator waveform through a slider, I would also suggest adding a popup menu with a list of all waveforms when clicking on the waveform. It's more obvious and also easier to grasp when the user does not know all the waveforms.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

phanoo

Thanks for your findings I'll correct the "Save and quit" bug and take your ideas in account !

For the CPU usage it seems it's related to the number of draw calls, as I expected. I'll try a different approach, instead of each elements drawing their own stuff they'll reference them in a "Display manager" that will display them all in 1 draw call. I guess it would at least divide CPU usage by 2. But keep in mind it'll be still more expensive than a native GUI. The full screen is redrawn at 60fps (or whatever is your monitor refresh rate) like in video games

Alice (Midori)

Wow, this is really inteteresting, definitely gonna try it out! I like the idea of having the hybrid GUI, with both tracker grid and a standard horizontal pianoroll. The only thing that really stands out in the bad way for now is that very high CPU load issue, even in idle state, but hopefully this can be sorted out sometime. Also, as far as the redraw rates are concerned, you could possibly add a user-adjustable setting to control it.
Tracker and synth music enjoyer
An internet potato

phanoo

Hi ! Thanks ! The piano roll is more for viewing and correcting wrong notes than for real editing but it may change in the future :)

How high is your CPU usage ? Can you PM me all the info ? (CPU % depending on the page, with/without playback, CPU type, GPU, OS...). It's 1.5% idle max on my i7, i will bring it to 0.8% in the next release which should be <10% for Saga Musix' Core2duo. Not sure it's worth to go further

Alice (Midori)

No need to use PM, i don't consider this information secret :)
I'm running Windows 8.1 x64, with minimal set of background services on a notebook machine with this CPU and 6GB of DDR3 memory clocked at 1600MHz. It's a dual-GPU computer, with Intel HD Graphics 5500 and nVidia GeForce GT 920M, each with 1GB of dedicated memory, running at stock clock rates.

The CPU usage isn't anything strikingly high here, but there's still a room for improvement imho, especially in the idle state.
Here are my readings from Process Explorer:

pattern tab ~1.5-4%
piano roll ~1.5-4%
instruments ~3.88-5%
general ~1.16-3%

(it's probably gonna hit pretty high values during playback of modules with complex instruments and high channel count anyway, so i didn't bother measuring that)
Tracker and synth music enjoyer
An internet potato

phanoo

#12
More active channels adds some computations but the sound engine is already quite optimized, FM requires more processing than sample playback.

I worked on the instrument page, it should be fine cpu-wise for the next version, and the program will use a bit less cpu in overall :)

Rakib

Really nice program. But I also have some problem with cpu usage, its around 10% with no playing, funny that playing the demosong barely affect cpu usage. My cpu is core i7-4600u.
^^

IsaacNorman

Really nice program, it really does merit the positives of OpenMPT itself and FM synthesis.

I don't think that's it's inappropriate to ask if you're going to support 4k natively? I have to use the DPI scaling hack in Windows 10 to make it appear on my screen in a readable fashion. Also, what sound chip are you emulating? It sounds quite clean!
For the best quality, please select the uncompressed option, preferably with the FLAC codec.

- Isaac Norman