The issue here is that emulators generate/playback audio and video at slightly different rates. Most emulators synchronize to the audio rate, which leads to stuttering, and jerky scrolling, when a video frame must be dropped or delayed. Alternately, an emulator can synchronize with video, but that can lead to audio issues (popping/crackling).
Try my NES emulator, nemulator. It synchronizes to the video refresh rate, for smooth scrolling, while dynamically (and inaudibly) resampling the audio rate to match. The end result is perfectly smooth video without audio issues.
Check out the nesdev wiki and nesdev forums.
Additionally, here is a pretty good write-up on writing an NES emulator: http://nemulator.com/files/nes_emu.txt.