Thus I finally got around to making a control interface for the audio cross-bar switch. This has been built into the freeze menu to make it easy to change the audio levels when running a program, without having the program to know about the cross-bar. The first step was to add an "A" option to go to the audio mixer in the freeze menu. "A" was used for enabling cartridges, so that function has been changed to "T".
This then takes you to a screen like this, where you can modify all the coefficients for the cross bar:
This looks quite complicated, but is in reality not too bad. The columns of 4-digit hex numbers (we will eventually make a friendlier display of the volume levels) are the level for the input on the left for the output at the top. There is also a pseudo input which is the master volume input. The other inputs down the left, from top to bottom are the left SID, right SID, first and second phone modems (for the MEGAphone, which supports dual cellular radios), bluetooth left and right microphone/audio inputs (again for the MEGAphone), line in left and right, the left and right 16-bit digi channels of the MEGA65, then up to four microphone channels (again, mostly for the MEGAphone), then one input channel that is spare, and the master volume level.
So, finally we were able to start investigating what was wrong with the SIDs. We have known for a while that some things sound quite wrong with the new VHDL SID implementation we are using, despite the fact that technically, it should sounds really great, with all internal features of the SIDs implemented carefully by the author. For example, the Trap demo shown below, had very muffled drums, and just generally sounded wrong:
I'm not very musically inclined, so couldn't alone even work out what was wrong. But this week I am not working alone, but rather with the MEGA65 crew here in Germany, so together with Deft and Libi we started investigating. After about an hour of fiddling and comparing audio output from the VICE with the output from the MEGA65 (with the microphone input on the MEGA65 nicely muted using the audio mixer interface in the freeze menu), we realised that the problem was actually quite simple: The SID was producing audio one octave too low, and the ADSR behaviour was also half-speed. Thus it seemed that the frequency input to the audio engines of the SIDs needed doubling.
After months of worrying about how hard the problem would be to find, and then to fix by fiddling with low-level signal processing algorithms in the SID implementation, it ended up taking only about a further hour to fix.
You can hear the difference between the old broken audio, and the new fixed audio. (The lower wave form in each video is the old broken audio, and the upper waveform is the fixed one, for those wanting to interpret the images in the videos)
The difference is noticeable in all sorts of games, and it really does now sound simply great. This is the joy of the power of open-source projects -- thanks to the SID work of Alvaro Lopes (SID filters in VHDL) and Jan Derogee (SID VHDL implementation), the MEGA65 now has really, really nice sound.
Been giving your blog posts a re-read lately, seem to have missed some of the incremental good news like this one. Happy to hear the SIDs are sounding great now :-)
ReplyDelete