lidnariq wrote:That's vitally important. Sound effects usually aren't in tune and usually don't need to be. The loss of one sound generator is a lot easier to chew than the loss of three.
I'd look at it differently: if one could swallow the loss of CPU time, especially in any vblank where it's necessary to perform sprite updates, one would gain the ability to use all of the built-in voices for sound-effects. I doubt a game would be very practical unless one used an IRQ that could be synchronized with horizontal sync, but a Frogger/Preppie style game with excellent music might be practical given such hardware.
The TIA's native sound generators start out of tune with themselves and just get worse from there. Composing music for them is an academic exercise, comparable to writing 12-tone music. It's technically doable, but it's horribly constrained, and requires accepting that some notes are either just not available, and/or are going to sound sour, and/or are going to inscrutably change tone color.
I've done two programs that played music on the TIA. Toyshop Trouble was in C major and was mostly in tune except for the Gs which were absolutely horrid, but for which I compensated a little by using two different "B" notes--a slightly sharp one for use when the base note was C or F, and a flat one for use when the bass note was G. The Stella's Stocking menu used my BTP2 (Better Than Pitfall II) music player so I was able to compose it for four voices with a five octave chromatic range. There are ten pieces of music in the menu program, in nine different keys. If I remember right, C major was the most solidly in tune, and C#/Db was the worst.
A large capacitor is less stable over time, and a large resistor is more sensitive to crosstalk, while an RC that runs at a couple megahertz is comparatively stable. But if the RC has a high operating frequency one has to add a divider, and at that point one may as well start with the NES's M2 signal.
If I were going to use a 555, I would set its pitch to 15-16khz (middle C would be 262Hz when the oscillator frequency is 15,720Hz), probably using a 0.1uF cap (which is why I mentioned that value).
Vibrato doesn't sound good when it's a function of what's being displayed on screen, or what routine the CPU is currently executing, or anything with irregular period.
Such things shouldn't affect the oscillation rate of the 555. They might affect the level of jitter in the IRQ timing, but as I said I think the multi-voice music driver would probably be most useful for title screens.
Here's a very rough test/demo of a 4-voice driver. It plays ascending chromatic scales at four different rates on the four channels using the DPC for timing. I should use less-harmonically-rich waveforms for the upper notes since aliasing becomes noticeable in the top octave, but I think the quality is adequate to show that with some tweaking the effect could be listenable. As I mentioned earlier, the ISR ends up with an absurd number of cycles to burn when doing "only" four voices (between the third and fourth "lda linearityLookup / sta $4011" and "lda linearityLookup / sta $4011" it does nothing useful except reload the calling program's X and Y register values), so there's lots of room to add more audio fanciness.
PS--The demo sounds lousy on MESEN, but much better on my actual NES console.