FM Composer, a tracker with integrated FM synthesizer

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

Previous topic - Next topic

phanoo

#15
Quote from: IsaacNorman on February 23, 2018, 15:48:17
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!

I don't emulate an existing chip it's my own FM engine desgined from scratch. I read a lot about how Yamaha's FM chips works and how the software emulations were done. I re-used some of the ideas while adding some new ones. It sounds cleaner than a YM2612 for example, but still has some aliasing that you can notice in bass sounds. It's due to the oscillator waveforms that are pre-computed to save CPU. Each one has 2048 steps, while the YM2612 and most OPL-series use 1024 steps tables. I think Yamaha switched to 2048 for their SY-77/99 synths. You get cleaner sound with a slight bit of 'dirtyness' sometimes ! :)

For the 4K I'd like to support it, however I don't have a 4k monitor. I'd need some sort of 4k emulation on a full HD screen, but I have no idea if such a thing exists :o

Saga Musix

#16
I didn't have a look at how your graphics work, but you don't really need a 4K screen to test high-DPI scaling. ;)
4K screens have a higher pixel density, so all you need to do is scale up the fonts and icons accordingly. On Windows it works somewhat like this:
HDC dc = ::GetDC(hwnd);
int dpi = ::GetDeviceCaps(dc, LOGPIXELSY);
::ReleaseDC(hwnd, dc);

For "normal" screen resolutions, you get a DPI value of 96. On a 4K screen, it may be e.g. 192, meaning that you have to scale all graphics by a factor of 2. In particular, the window size itself also needs to be scaled of course.
If you want to test your code, you can also change the scaling settings in Windows to e.g. 125% or 150%.
» 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

#17
Mmh i see, thx for the example.
Currently SFML doesn't provide any way to know the current DPI, so i'd have to use Windows code. I can easily stretch the whole window, it does the job but will be slightly blurry. The best would be to use bigger font size and make all elements bigger and scale all positions, which may require a lot of work. I need to check before I confirm i'll implement that ;D

RyanBram

Hi, Mr Phanoo.
I have tried your software and it was really a great software ;D. One of feature that was missing to me is exporting to more common tracker format, such as Impulse Tracker (.it) format so the resulting song can be played with common module library without relying to convert it to streaming format which resulting huge filesize.

The MIDI export is already present, then the alternative maybe you can just add a feature to generate SF2 along with the MIDI file (like VGM Trans) so OpenMPT can just import it and exporting as IT or MPTM.

IsaacNorman

#19
Quote from: phanoo on February 23, 2018, 22:08:37

I don't emulate an existing chip it's my own FM engine desgined from scratch. I read a lot about how Yamaha's FM chips works and how the software emulations were done. I re-used some of the ideas while adding some new ones. It sounds cleaner than a YM2612 for example, but still has some aliasing that you can notice in bass sounds. It's due to the oscillator waveforms that are pre-computed to save CPU. Each one has 2048 steps, while the YM2612 and most OPL-series use 1024 steps tables. I think Yamaha switched to 2048 for their SY-77/99 synths. You get cleaner sound with a slight bit of 'dirtyness' sometimes ! :)

For the 4K I'd like to support it, however I don't have a 4k monitor. I'd need some sort of 4k emulation on a full HD screen, but I have no idea if such a thing exists :o

That's pretty sick mate. I would never have guessed that it was your own FM Synthesis design, because when I was listening to it (aside from noticing the 6 operators), I was going to guess that you were aiming for the DX7 level of quality, as it sounds quite clean as well. However, like you said, it does have the ability to sound similar to the YM2612. I love how you made the oscillators and operators easy to program. VOPM and Dexed are both good options as VST plugins for OpenMPT, but are not as easy as your program. :)

About the 4K, it'd be nice if you could implement that. If it's too much to ask, then no need to worry, I can override the DPI scaling in "File Properties > Compatibility > Change high DPI settings" on Windows 10. - - I must ask, will it be possible to export as FLAC in the future? Or maybe the ability to choose our own bit depth when writing to a file as well? (For example: 8 bits, 16, 24, or 32 integer/floating point?)
For the best quality, please select the uncompressed option, preferably with the FLAC codec.

- Isaac Norman

Midori Mizuno

#20
QuoteOne of feature that was missing to me is exporting to more common tracker format, such as Impulse Tracker (.it) format so the resulting song can be played with common module library
I bet this wouldn't be trivial and kinda mising the point of faithful sound reproduction, siince this tracker, unlike most of old DOS ones isn't a sample-based one, it does realtime synthesis, much like AdlibTracker, VGMM or DefleMask for example, so you would need to convert everything into the samples, effectively losing (almost) all instrument-specific information. Consider the case when an FM instrument sounds totally different at various velocities, as the easiest explanation of this problem. What would you do to keep the original timbre after the conversion? You could possibly try approximating it and sample it multiple times, creating relevant samples for several velocity ranges, but this would obviously result in much bigger .IT files. Not even mentioning other problems, like the fact that you can't keep some characteristics of the timbre that occur at fixed intervals of the time (like phasing filters etc.). since they would need to be "baked" into the samples themselves, making them dependent of the pitch (and, in turn, the speed) at which the sample is being played back at.

Saga Musix

Exactly, a faithfully exported IT file would be much bigger than any streamed version unless only very basic instruments are used.

QuoteI was going to guess that you were aiming for the DX7 level of quality
DX7 level of quality would be quite noisy, wouldn't it? ;) The whole design is definitely very close to various FM implementations by Yamaha, but naturally these days when implementing it from scratch, you can ignore various comprises that had to be done back then, because the hardware is much more powerful.
» 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

Yeah exporting to .IT would be hard to do in an automated way, MiDoRi explained well the problems for such a conversion.
If your goal is to make tracker music with some FM sounds, I suggest you use FM Composer to create the sounds, then export the single notes as wave and create the song with OpenMPT.

For the export bit depth yes sure, I'll add this soon ! For the .FLAC format I need to check the license, if it's ok I need to find which library to use and implement it. It was quite easy for MP3 so it should be doable for FLAC :)

Saga Musix

The official libFLAC is BSD-licensed and easy to use. It shouldn't be a problem for you. ;)
» 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

Hello !

I've published the 1.4 version, taking in account most of your requests :)

  • High DPI screen handling (special thanks to IsaacNorman for taking time for testing this feature)
  • Lowered CPU usage in idle (expect 50%-70% reduction depending on the page)
  • FLAC export
  • Editing step (row skipping when you enter notes)
+ several small bug fixes

Thanks for making FM Composer better !  ;)
http://fmcomposer.org#download
I've also slightly modified the website, you can download the old versions if needed for some reason

Exhale

Hi, I thought I would have a look at the software and I like it very much, it has a great sound and it seems like there is a lot of flexibility in it. Just picked it up tonight to have a good look, and 2 things struck me in particular:
The first is on my stock resolution on this laptop (1336/768) and with the dark theme, the text was illegible... so I changed my resolution and had a bit of fun anyways, then I changed it to the light theme and it now seems to work with my res.
Second, I went searching through your instruments for a piano... and I eventually found it :) I thought it would be in melodic percussion, since that is it's classification... I'm mentioning the second one, I admit, just because my confusion was there.

:) anyways, enjoyed the software, the demo melodies were pretty and demonstrated what I thought was a heck of a lot of range, I will certainly give it some time in the future.
___________________
The turtle moves!

LovelyA72

I am using a 4K screen. And there is a noticeable problem: the program will make my cursor looks very small and hard to work with this program.
I love OpenMPT and C#...

Saga Musix

Opening the new version gives me a warning on every startup that some file cannot be found. Apart from that, the CPU load definitely went down.
» 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

Isn't that the last file you opened doesn't exist anymore ? (or renamed folder)
At launch FM Composer will try to re-open the last file, except if you unchecked the option in the Settings page

phanoo

Quote from: LovelyA72 on March 07, 2018, 05:10:40
I am using a 4K screen. And there is a noticeable problem: the program will make my cursor looks very small and hard to work with this program.
By cursor do you mean the mouse cursor ? I'd be very grateful if you could send me a screenshot so I can see what happens ;)