Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /storage/content/49/145849/famitracker.com/public_html/forum/classes/dbHandler.php on line 29
Like N163, it would be nice to add wavetable macro support to FDS.
Also it would be nice to have WAV/RAW sample input; 4-bit conversion for N163 and 6-bit for FDS. The exportation process could show how long the waveform could be within NSF file limitation; let you cut crop sections of the waveform; show in alternating coloration 32 sample segmentations for N163 and 64 segmentations for FDS -- N163 samples being multiples of 32 and FDS being multiples of 64; then finally making an automated envelope macro in the instrument file.
A Vxx command for switching waves is planned for the FDS channel, but not a macro at the moment. The reason is that the wave cannot be changed without halting the channel, which won't sound good when doing too often. This is not a problem on N163.
I'll take a note on a tool for converting waves to instruments. However I've seen several tools around for it so it's already possible, but I'm not sure if any supports multiple segments?
As far as I can tell, the popping noise can be masked fairly well when you use the FDS as a PWM channel, especially if you're not at full volume. [url=http://famitracker.com/forum/attachments/37020/fds.ftm]Necrophageon's ftm
za909, try that in an NSF player and the problem should be very apparent. (e.g. NSFPlay, NotSoFatso, GME, VirtuaNSF.) The problem is the CPU needs a significant amount of time to upload an entire waveform to the FDS, during which the FDS sound has to be halted. I don't think FamiTracker really emulates the full length of that pause.
I did once see an NSF that did a neat trick. Basically it started with a soft/sine kinda wave, and slowly moved just one sample up and down, gradually introducing a harsh buzz as it moves in and out. Because it was only changing one sample at a time, the pause could be made small enough to be unnoticeable.
Actually the delay is fully simulated in famitracker, I counted the number of cycles necessary to write the full wave and halted the channel accordingly.
The reason it sounds worse in some players is because of yet another difference in FDS emulation, probably caused by the wave phase being reset or the channel output being forced to zero rather than just halted (I don't know which). The documentation is unclear on this matter and I do not know the correct behaviour, I'll check this.
NSFPlay doesn't reset phase, it just halts. The sound is actually consistent across the four emulators I tried, so I think they're all doing the same thing.
If it's under 60hz and your waveform is a square to begin with, no you won't notice the halts so much, but you should notice that it plays at a lower pitch in NSF players, which again is a result of the longer halt period I believe.
I tried a few players, and NEZplug++ sounded the same as famitracker. But that is kind of reasonable as that's where the original code comes from (though an older version).
I did some investigation here and I think I found the cause. The simulated delay seems to be correct, but the FDS emulator in famitracker/nezplug does not halt the wave step generator during wave writing, it only stops the output. That would explain why the pitch is altered in other players and also why it sounds more distorted during wave changes. This is probably the correct behaviour, but I'm gonna try to verify it tomorrow on my FDS cart.
Ok, the FDS cart is really difficult to hotswap compared to the other carts for some reason, but now I got some results.
It turned out that the NEZplug++/famitracker behavour was actually correct here, not exactly what I expected.
The first thing I tested was: while a saw wave was running, enable the write flag for some cycles and then disable it again (without actually writing a new wave). I expected the wave step counter to halt and the wave to stop at a phase, and then keep running from that phase again when started. Instead, it jumped to the new phase position where the wave would be as if it wasn't halted at all, indicating that the counter is still actually running in the background. The output is also kept at the wave step level, and not being forced to zero as some players do.
Next step was to actually verify this by testing a PWM effect, similar to what was posted in this thread. A recording from the FDS hardware and the test ROM turned into an NSF file is attached, and this shows that it actually sounds a bit cleaner than most NSF players appears to do. (Still it's not perfect and is likely worse for other types of waves.) Another thing that can be noted is that the FDS channel contains a strong low-pass filter, this is because the volume control is actually done with PWM rather than in the digital domain. This might be worth investigating further.
[quote=rainwarrior]
I did once see an NSF that did a neat trick. Basically it started with a soft/sine kinda wave, and slowly moved just one sample up and down, gradually introducing a harsh buzz as it moves in and out. Because it was only changing one sample at a time, the pause could be made small enough to be unnoticeable.[/quote]
*cough* [url=http://www.youtube.com/watch?v=f5X4ZTQvWyM&t=164]http://www.youtube.com/watch?v=f5X4ZTQvWyM&t=164
[quote=Xyz_39808][quote=rainwarrior]
I did once see an NSF that did a neat trick. Basically it started with a soft/sine kinda wave, and slowly moved just one sample up and down, gradually introducing a harsh buzz as it moves in and out. Because it was only changing one sample at a time, the pause could be made small enough to be unnoticeable.[/quote]
*cough* [url=http://www.youtube.com/watch?v=f5X4ZTQvWyM&t=164]http://www.youtube.com/watch?v=f5X4ZTQvWyM&t=164[/quote]
Actually that NSF is made in famitracker so the entire wave is changed there, but it would be possible to cut down the time needed to update the wave in this case.