Wikipedia article
To put it more basically... linear interpolation is basically taking the average of a series of samples.
So if you're downsampling from the NES's 1789772 Hz to a PC's 44100, you'd need to convert ~40.5 NES generated samples into a single PC output sample.
"Nearest Neighbor" is the quick and dirty way of doing this which just takes one sample every 40 / 41 and output is, ignoring all samples in between. This produces a lower quality sound, as it will result in some aliasing (paticularly noticable on higher tones).
"Linear Interpolation" is a bit more graceful. The idea is you 'average' a block of 40 or 41 samples and output the average, rather than simply taking only one of the samples as-is.
Quote:
How do i convert the value get from a apu channel (0-15) to a 16 bit sample?
As dwedit mentioned, the most straightforward way is to simply multiply to scale up the amplitude.
Another alternative is to build a series of LUTs for the channels and use the channel output (0-F) to index the LUT. The advantage to this is it gives you a bit more control over each channel, and you can "merge" channels to mimic some of the audio effects on the NES (like how the triangle gets quieter as the DMC's output goes high -- see blargg's doc for details).