sasq64 / droidsound

Android music player
http://swimsuitboys.com/droidsound/
23 stars 11 forks source link

VICEPlugin bad sounding songs #7

Open sasq64 opened 13 years ago

sasq64 commented 13 years ago

Just an open issue with songs that sounds wrong with VICEPlugin;

Martin Galway - Miami Vice Martin Galway - Wizball Neil Brennan - Fist II (song 2) Tim Follin - L.E.D. Storm

Rob Hubbard - Deep Strike Rob Hubbard - Dragons Lair Part II - (song 3)

alankila commented 13 years ago

In my opinion the Miami Vice song plays correctly. Where exactly is the problem?

The Follin tune, and Hubbard tunes are just with a 6581 filter cutoff too low for what are intended. The current version of reSID doesn't support adjusting the filter cutoff frequency, but we are going to add this feature. After that you can tune filter curve up a bit for Hubbard, and up by a great deal for Follin.

The only problematic song I actually agree on currently is Wizball, but ONLY because it somehow drives the SID to generate a sound there that no real SID chip does. We believe that to be an actual circuit simulation issue.

There's also Gray's Vendetta, which is missing filtered sounds entirely. I believe that is a bug with the song tune itself, though.

sasq64 commented 13 years ago

You're right about Miami Vice, I had just become accustomed to hearing it with sidplay2, which removes that filter distortion.

Do you mean you have to set the cutoff manually? I guess I can get around that by just having a small database over problematic songs and set it accordingly.

alankila commented 13 years ago

Well, there is no metadata for HVSC that describes what the intended filter cutoff is. Some people have suggested to create this metadata by observing what values songs use on the filter and then working out what CF register -> center frequency mapping to use so that the CF range used would result in maximum changes in filter center frequency. This whole notion is a bit questionable, because the composer may be using the filter to aim for a particular effect, such as "this should come across as a very muffled sound", and it is here taken to be "this value is one of those that composer uses, let's make sure that it makes sound also", but I admit that nobody has suggested anything better yet.

I personally believe that this issue should be left for the user to worry about. For SID playback, it might be useful to have some controls that can be used to adjust the curves up or down. Alternatively, it is entirely possible to make composer-specific setting that could be used to adjust the filter curve position based on general belief of the type of machine that the composer used in order to make songs play closer to what is intended.

However, nobody has made the first move to my knowledge. We can make the argument that Galway and Hubbard had similar chips, with quite high cutoff, and Follin had a SID with the cutoff exceptionally high most of the time. Unfortunately, some composers used multiple C64s, so this is where it breaks down.

More importantly, people will not agree on what the correct setting is. Therefore, users must have manual control also, because they tend to strongly believe that whatever they heard their C64 make is what the right sound is. That class of users will not want automatics at all.

So let me suggest an UI control: we'll call it "Filter Bias". Then: 6 options, which are "Automatic", "Very high", "High", "Normal", "Low" and "Very low".

The default setting of Automatic consults the database, and uses "Normal" if the database has no entry. In reality, this is a smoothly varying control that needs to give about +- 1 V of control over a central filter parameter, the FC DAC bias. I'm going to use some value range like -1000 .. 1000 for it, with 0 being Normal. The unit is thus mV, but the range is only notionally about -1000 to 1000: nothing prevents specifying +1.233V as the bias if one wants to.

A smart database design could be a pattern match design: there are rules, and the first one to match will decide. The matches would operate on just 2 fields, song title and song composer, which allows overriding individual tunes and specifying a catch-all setting per composer.

What do you think?